JavaEE Webapp来自Servlet外部的自定义授权

时间:2013-10-16 11:13:25

标签: java java-ee authentication authorization

我正在云平台上运行JavaEE网站。 现在我想使用两种类型的身份验证:

  1. 来自SSO系统,它完美地集成在平台上并且工作得非常好。
  2. 有问题的部分:我想在会话期间授权来自1)的用户,并让他访问更受限制的资源。
  3. 一些细节

    • 我从1)获得用户及其数据。
    • 用户首先要求获得2)的许可,可以拒绝或批准。用户从服务获取授权,这超出了他的servlet范围。
    • 为此,我将User-POJO(以此用户的会话作为成员)传递给服务。
    • 如果服务授予该用户权限,它将为用户会话设置属性:

                 userSession.setAttribute("auth", "granted");
      

    要限制对该资源的访问,我使用过滤器:

       @WebFilter("/supersecret/*")
       public class NiceFilter implements Filter {
    
    
       @Override
       public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
    
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
    
        HttpSession session = req.getSession();
    
        // check
        if (session.getAttribute("auth") != "granted")
            // redirect to login
        else
            chain.doFilter(req, res);
    
      }
          //...
    

    虽然目前有效,但我觉得我的解决方案非常草率。

    1. 在servlet范围之外改变用户会话似乎是不好的做法。
    2. 出于安全目的向会话添加属性可能不是一个好主意吗?
    3. 我宁愿使用标准的JavaEE机制,但大多数已经用于auth-method 1),就像在web.xml中声明 login-config 一样。

      有关此问题的更强大解决方案的任何想法?

      提前致谢:)

0 个答案:

没有答案