使用Java EE Form身份验证登录后访问用户详细信息



我实现了一个Java EE安全领域,如果用户试图访问受保护的资源,该领域会将用户重定向到login.jsp。

  • 假设用户想要转到一个受保护的url-http://mywebapp/shopping_cart,该url映射到ShoppingCartServlet
  • 由于他们没有登录,Glassfish将他们引导到login.jsp
  • 然后,他们输入用户名和密码,然后单击"登录",信息将被张贴到http://mywebapp/j_security_check
  • 如果他们输入了正确的详细信息,那么他们将被重定向到处理url http://mywebapp/shopping_cart的servlet

现在我想从数据库中提取用户的详细信息,但当重定向请求中没有参数时,我该怎么做?

他们的用户名被发送到http://mywebapp/j_security_check,但j_security_check向http://mywebapp/shopping_cart发出的重定向请求中没有参数。那么,一旦用户登录,使用什么方法来访问他们的详细信息呢?

创建一个过滤器,用于检查用户是否已登录,而会话中不存在来自数据库的关联User对象。然后,只需加载数据并放入会话。

基本上,

@WebFilter("/*")
public class UserFilter implements Filter {
    @EJB
    private UserService service;
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        String remoteUser = request.getRemoteUser();
        if (remoteUser != null) {
            HttpSession session = request.getSession();
            if (session.getAttribute("user") == null) {
                User user = service.find(remoteUser);
                session.setAttribute("user", user);
            }
        }
        chain.doFilter(req, res);
    }
    // ...
}

相关内容

  • 没有找到相关文章

最新更新