我正在尝试使用我的SSO系统自动登录用户。
因此,当用户验证时,Filter仍会一次又一次地重定向到自身。
这是我的过滤器代码:
@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我检查过,会话属性帐户名不为空。
答案 0 :(得分:0)
看来您最后没有打fc.doFilter(sr, sr1)
。 response.sendRedirect如果不使用doFilter则没有任何意义。