繁体   English   中英

过滤j_security_check无效。 Glassfish V3 Netbeans 6.8

[英]Filter on j_security_check not working. Glassfish V3 Netbeans 6.8

我正在尝试在j_security_check上执行过滤器,以执行一些登录后操作,例如更改重定向URL等。但是问题是我的过滤器从未执行过。 我可以申请任何拼布吗? 任何帮助,将不胜感激。 我真的受够了容器管理的安全性。

提前致谢。

您无法以编程方式钩上/j_security_check 这是安全限制。

最好的选择是通过手动检查HttpSession的用户主体来确定首次登录,如果不存在则将其放置在其中,然后执行操作。 之前,我已经发布了类似的答案。 这是过滤器代码的一部分,您只需要将过滤器映射到覆盖安全页面的所需url-pattern

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    UserPrincipal user = httpRequest.getUserPrincipal();
    HttpSession session = httpRequest.getSession();
    if (user != null && session.getAttribute("user") == null) {
        session.setAttribute("user", user);

        // First-time login. You can do your intercepting thing here.
    }
    chain.doFilter(request, response);
}

恕我直言,您不应尝试拦截容器的身份验证系统; 在您的情况下,可以在web.xml中以声明方式设置重定向URL。

如果您想执行一些认证后的操作,建议您设置一个虚拟的认证后servlet / jsp,它可以执行您想要的操作,然后重定向到请求的资源。 然后可以将该身份验证后servlet正确配置为登录后页面。

一种便携式解决方案。

  1. 在模式/ *上注册全局过滤器;

  2. 在doFilter()中,尝试从会话(即用户工作空间)中获取自定义对象;

  3. 如果object为null,则将新对象放入会话并执行登录后逻辑。

     public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ) throws IOException, ServletException { Principal principal = request.getUserPrincipal(); if(principal != null) { UserWorkspace uwks = (UserWorkspace) getSession(request).getAttribute("com.foo.myproject.userworkspace"); if (uwks == null) { uwks = new UserWorkspace(principal); getSession(request).setAttribute("com.foo.myproject.userworkspace", uwks); // // post-login code here // } } chain.doFilter(request, response); } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM