2

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

  1. 来自一个 SSO 系统,该系统很好地集成在平台中并且运行良好。
  2. 是有问题的部分:我想在会话期间从 1) 授权用户,并让他访问更受限制的资源。

一些细节

  • 我从 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. 出于安全目的向会话添加属性可能不是一个好主意?

我宁愿使用标准的 JavaEE 机制,但它们中的大多数已经用于 auth-method 1),比如在 web.xml 中声明login-config 。

有什么想法可以更有效地解决这个问题吗?

提前致谢 :)

4

0 回答 0