我正在尝试使用我的SSO系统自动登录用户。
因此,当用户验证时,过滤器仍然一次又一次地重定向到自身。
这是我的过滤器代码:
@Override
public void doFilter(ServletRequest sr, ServletResponse sr1, FilterChain fc) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) sr;
HttpSession session = ((HttpServletRequest) sr).getSession(false);
if (session != null && session.getAttribute("accountName") != null) {
fc.doFilter(sr, sr1);
return;
}
try {
TicketInfo ticketInfo = sso.getTicketInfo(request);
if (ticketInfo != null && (ticketInfo.getResult().equals(Result.SUCCESS)) && ticketInfo.getUserName() != null) {
if (ticketInfo.getExpireDate().compareTo(new Date()) >= 1) {
String accountName = ticketInfo.getUserName();
if(session!=null){
session.setAttribute("accountName", accountName);
}
fc.doFilter(sr, sr1);
}
}
} catch (Exception e) {
e.printStackTrace();
}
HttpServletResponse response = (HttpServletResponse) sr1;
response.sendRedirect("http://sso-login.test");
}
我做错了什么?我认为在代码的这一部分
if (session != null && session.getAttribute("accountName") != null) {
fc.doFilter(sr, sr1);
return;
}
过滤器必须停止重定向并链接我的请求,但看起来它仍然重定向到 sso-login。
非常感谢您的关注。
PS 我检查过,会话属性帐户名不为空。
看起来你最后没有打电话给fc.doFilter(sr, sr1)
。 response.sendRedirect没有意义,如果不在它后面使用doFilter。