我已经实现了一个 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
。那么,在用户登录后,使用什么方法来访问其详细信息呢?
创建一个filter https://stackoverflow.com/tags/servlet-filters/info检查用户是否在没有关联的情况下登录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);
}
// ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)