小编典典

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

jsp

我已经实现了Java EE安全领域,如果用户尝试访问受保护的资源,它将用户重定向到login.jsp。

  • 假设用户要转到受保护的网址- http://mywebapp/shopping_cart该网址已映射到ShoppingCartServlet
  • 由于它们未登录,因此Glassfish会将其定向到login.jsp
  • 然后,他们输入他们的用户名和密码,然后单击“登录”,并将信息发布到 http://mywebapp/j_security_check
  • 如果他们输入了正确的详细信息,那么它们将被重定向到处理url的servlet。 http://mywebapp/shopping_cart

现在,我想从数据库中提取用户的详细信息,但是当重定向请求中没有任何参数时,该如何处理?

他们的用户名已发送到,http://mywebapp/j_security_check但j_security_check向的重定向请求中没有参数http://mywebapp/shopping_cart。那么,用户登录后使用哪种方法访问用户的详细信息?


阅读 274

收藏
2020-06-10

共1个答案

小编典典

创建一个过滤器,该过滤器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);
    }

    // ...
}
2020-06-10