3

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

  • 假设用户想要访问一个受保护的 url -http://mywebapp/shopping_cart映射到 ShoppingCartServlet
  • 由于他们没有登录 Glassfish 将他们定向到 login.jsp
  • 然后他们输入他们的用户名和密码并单击登录,信息就会发布到http://mywebapp/j_security_check
  • 如果他们输入了正确的详细信息,他们就会被重定向到处理 url 的 servlethttp://mywebapp/shopping_cart

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

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

4

1 回答 1

4

创建一个过滤器,用于检查用户是否已登录,而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);
    }

    // ...
}
于 2013-02-07T18:41:26.453 回答