我想补充记得我功能,我的应用程序,但由于某些原因,HttpServletRequest.login()抛出一个ServletException
:记住我自动登录与JSF + JAAS
javax.servlet.ServletException: Login failed
at com.cleanup.filter.AutoLoginFilter.doFilter(AutoLoginFilter.java:71)
线71:
req.login(adminUser.getEmail(), adminUser.getPwd());
我知道,根据文档:
抛出:ServletException - 如果配置的登录机制不支持用户名密码验证,或者如果非空主叫方 身份已经建立(在登录调用之前),或者 验证所提供的用户名和密码,则返回 。密码失败。
这反过来又意味着凭证是“无效的”,这是不真正,因为日志机制工作正常。
但是为什么会抛出这个异常呢?
我的理论是,它的原因是password
被加密,但如果是这样的话,不应该request.login(..,..)
也适用于已经哈希的密码?
这里是我的过滤器:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
String remoteUser = (String) req.getRemoteUser();
if (remoteUser == null) {
String uuid = CookieRememberUtil.getCookieValue(req);
System.out.println("Found cookie" + uuid);
if (uuid != null) {
AdminUsers adminUser = cookiesFacade.getAdminUserFromUUID(uuid);
if (adminUser != null) {
req.login(adminUser.getEmail(), adminUser.getPwd());
CookieRememberUtil.addCookie(resp, uuid);
} else {
CookieRememberUtil.removeCookie(resp);
}
}
}
chain.doFilter(request, response);
}
不知道我理解你。 – shep