Java j_安全检查上的过滤器不工作。Glassfish V3 Netbeans 6.8

Java j_安全检查上的过滤器不工作。Glassfish V3 Netbeans 6.8,java,servlets,Java,Servlets,我试图在j_security_check上执行筛选器,以执行一些登录后操作,如更改重定向url等。但问题是我的筛选器从未执行过。有我可以申请的补丁吗?任何帮助都将不胜感激。我真的厌倦了集装箱管理的安全性 提前谢谢。我想你不应该试图拦截集装箱的认证系统;在您的情况下,可以在web.xml中声明性地设置重定向URL 如果您想执行一些身份验证后的操作,我建议设置一个虚拟的身份验证后servlet/jsp,它执行您想要的操作,然后重定向到请求的资源。然后,可以将post-auth servlet正确配置

我试图在j_security_check上执行筛选器,以执行一些登录后操作,如更改重定向url等。但问题是我的筛选器从未执行过。有我可以申请的补丁吗?任何帮助都将不胜感激。我真的厌倦了集装箱管理的安全性


提前谢谢。

我想你不应该试图拦截集装箱的认证系统;在您的情况下,可以在web.xml中声明性地设置重定向URL


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

IMHO您不应该尝试拦截容器的身份验证系统;在您的情况下,可以在web.xml中声明性地设置重定向URL


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

您不能通过编程方式挂接
/j\u security\u check
。这是一个安全限制

您最好的选择是通过手动检查
HttpSession
中的用户主体来确定首次登录,如果没有,则将其放在那里,然后执行您的操作。我以前也发布过类似的答案。这里是过滤器代码的摘录,您只需要将过滤器映射到所需的
url模式
,覆盖安全页面

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);
}

您不能以编程方式挂接
/j\u security\u check
。这是一个安全限制

您最好的选择是通过手动检查
HttpSession
中的用户主体来确定首次登录,如果没有,则将其放在那里,然后执行您的操作。我以前也发布过类似的答案。这里是过滤器代码的摘录,您只需要将过滤器映射到所需的
url模式
,覆盖安全页面

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);
}
一个便携式解决方案

  • 在模式/*上注册全局过滤器

  • 在doFilter()中,尝试从会话(即用户工作区)获取自定义对象

  • 若对象为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);
      }
    
  • 一个便携式解决方案

  • 在模式/*上注册全局过滤器

  • 在doFilter()中,尝试从会话(即用户工作区)获取自定义对象

  • 若对象为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);
      }
    

  • 嗨,奥利弗,据我所知,我们不能在web.xml中设置重定向URL。我有不同的角色。行政和总务。能否在web.xml中为同一登录页面的这两个角色设置登录后的成功url?因此,如果管理员登录,他应该被重定向到/Admin/home.jsp,对于General,应该是/General/home.jsp,依此类推。我认为这根本不可能。这就是为什么我试图在j_安全检查中保留一个过滤器。不过,如果我遗漏了什么,请告诉我。嗨,奥利弗,据我所知,我们无法在web.xml中设置重定向URL。我有不同的角色。行政和总务。能否在web.xml中为同一登录页面的这两个角色设置登录后的成功url?因此,如果管理员登录,他应该被重定向到/Admin/home.jsp,对于General,应该是/General/home.jsp,依此类推。我认为这根本不可能。这就是为什么我试图在j_安全检查中保留一个过滤器。不过,如果我遗漏了什么,请告诉我。嗨,BalusC,实际上我想根据用户的角色将其重定向到正确的位置。这就是为什么我想保留一个过滤器来查看j_security_check-in会话/url重定向请求设置的所有变量。我终于找到了答案。这是一种修补工作,但更重要的是:)请查看此链接,并就您对我的方法的看法发表评论:-您可以在过滤器中执行此操作。将
    response
    转换回
    HttpServletResponse
    并调用
    sendRedirect()
    。脚本是不好的练习。你肯定!我会考虑这一点。因此,我可以保留一个简单的servlet,而不是过滤器。不管怎样,重要的是现在我可以休息了。我逐字逐句地搜索了谷歌上的每一个链接,看看我是否可以在这里和那里设置一些属性,它应该开始工作了。但遗憾的是,我没有找到任何这样的联系。然后,我在stackoverflow上发布了帖子,在这里我也没有得到回复。所以,我非常失望,然后今天我开始研究Spring安全性,看看它能提供什么,但最后这个想法打动了我,现在我可以休息一下,让容器处理一切。这种过滤逻辑不属于servlet。过滤器是一个完美的地方。嗨,BalusC,实际上我想根据用户的角色将其重定向到适当的位置。这就是为什么我想保留一个过滤器来查看j_security_check-in会话/url重定向请求设置的所有变量。我终于找到了答案。这是一种修补工作,但更重要的是:)请查看此链接,并就您对我的方法的看法发表评论:-您可以在过滤器中执行此操作。将
    response
    转换回
    HttpServletResponse
    并调用
    sendRedirect()
    。脚本是不好的练习。你肯定!我会考虑这一点。因此,我可以保留一个简单的servlet,而不是过滤器。不管怎样,重要的是现在我可以休息了。我逐字逐句地搜索了谷歌上的每一个链接,看看我是否可以在这里和那里设置一些属性,它应该开始工作了。但遗憾的是,我没有找到任何这样的联系。然后,我在stackoverflow上发布了帖子,在这里我也没有得到回复。所以,我非常失望,然后今天我开始研究SpringSecurity,看看它能提供什么,但最终这个想法打动了我,现在我可以休息一下,让t