Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 如何保护JavaEE6中的混合内容资源?_Security_Java Ee 6 - Fatal编程技术网

Security 如何保护JavaEE6中的混合内容资源?

Security 如何保护JavaEE6中的混合内容资源?,security,java-ee-6,Security,Java Ee 6,我正试图决定如何保护现代web应用程序。我对JavaEE6技术栈还比较陌生,但我做过一些没有使用安全性的宠物项目,所以我正在寻找一些关于如何使用现成的JavaEE6安全性的一般指导 我理解,声明式安全性允许您根据分配给试图访问资源的用户的角色来保护资源。因此,例如,一个用户在一个特定的URL上请求一个页面,JavaEE服务器检查用户的凭证,看他们是否有权访问该页面。这对于只有经过身份验证的用户才能访问的资源来说非常有意义。好的例子包括管理页面、用户帐户设置页面、受限内容区域 所以,只要我把一个网

我正试图决定如何保护现代web应用程序。我对JavaEE6技术栈还比较陌生,但我做过一些没有使用安全性的宠物项目,所以我正在寻找一些关于如何使用现成的JavaEE6安全性的一般指导

我理解,声明式安全性允许您根据分配给试图访问资源的用户的角色来保护资源。因此,例如,一个用户在一个特定的URL上请求一个页面,JavaEE服务器检查用户的凭证,看他们是否有权访问该页面。这对于只有经过身份验证的用户才能访问的资源来说非常有意义。好的例子包括管理页面、用户帐户设置页面、受限内容区域

所以,只要我把一个网站分为安全和不安全的两个区域,就可以了,我没有问题。但是我如何处理这样一种情况,即我有一个资源,我希望根据用户的身份验证级别对其进行不同的行为,以实现声明式安全性

例如,我可能在网站上有一个主页,如果用户是未经身份验证的用户,该主页会显示一个带有登录提示的视图,但是如果经过身份验证的用户访问同一资源,则应显示某种带有帐户管理链接的控制面板,等等,而不是登录提示

如何在现代JavaEE6应用程序中实现这一点?声明式安全性似乎没有足够的表现力来允许这种情况发生,因为它非常“要么全有,要么全无”。我读过一些关于编程安全性的书,但所有的指南都谈到servlet,在现代web应用程序中,我认为JSFs将是一种发展方向,而不是原始的servlet。我想确保,当我使用这种混合内容(取决于用户的身份验证状态)保护web应用程序时,我不会在整个web应用程序中滥发安全代码,因为这极易出错,而且非常混乱

鉴于上述要求,您会推荐什么解决方案?我不是在寻找一个循序渐进的方法,只是一些有用的建议,让我朝着正确的方向开始。“这是你可以使用的”和“这是如何实现你的目标”都会很有帮助


最后一件事,我希望避免将Spring套件加载到此webapp上。我喜欢尽可能多地使用JavaEE6容器技术,我听说在使Spring管理的bean和JavaEE容器管理的bean可用于彼此的上下文时存在一些问题。

好的,您应该阅读:JavaEE教程的一章

简而言之,在servlet或EJB中,您应该:

  • 声明涉及的安全角色:
    @DeclareRoles(“javaee6user”)
  • 在你的servlet里
    • 对整个servlet使用@ServletSecurity(@HttpConstraint(rolesAllowed={“javaee6user”}))(声明性安全)
    • 在servlet的方法中,使用
      request.isUserInRole(“javaee6user”)
      进行检查,就像您在“旧”servlet(编程安全性)中所做的那样
  • 在您的EJB中
    • 使用
      @RolesAllowed(“javaee6user”)
      (声明性安全性)声明整个方法所允许的角色
    • 注入
      @Resource SessionContext ctxbean上下文,并在方法中调用
      ctx.isCallerInRole(“javaee6user”)
      ,就像在“旧”EJB(编程安全性)中所做的那样

您应该阅读:JavaEE教程的一章

简而言之,在servlet或EJB中,您应该:

  • 声明涉及的安全角色:
    @DeclareRoles(“javaee6user”)
  • 在你的servlet里
    • 对整个servlet使用@ServletSecurity(@HttpConstraint(rolesAllowed={“javaee6user”}))(声明性安全)
    • 在servlet的方法中,使用
      request.isUserInRole(“javaee6user”)
      进行检查,就像您在“旧”servlet(编程安全性)中所做的那样
  • 在您的EJB中
    • 使用
      @RolesAllowed(“javaee6user”)
      (声明性安全性)声明整个方法所允许的角色
    • 注入
      @Resource SessionContext ctxbean上下文,并在方法中调用
      ctx.isCallerInRole(“javaee6user”)
      ,就像在“旧”EJB(编程安全性)中所做的那样

因此,JSF servlet充当所有web请求的前端控制器,这些请求指向web.xml(*.xhtml)中映射到JSF servlet的JSF资源。显然,我还没有实现JSFServlet,所以如果我希望JSF根据用户的身份验证做出不同的反应(在同一页面上显示元素a而不是元素B),那么我在哪里使用您提到的这些安全性呢。因此,JSF servlet充当前端控制器,用于对映射到web.xml(*.xhtml)中JSF servlet的JSF资源的所有web请求。显然,我还没有实现JSFServlet,所以如果我希望JSF根据用户的身份验证做出不同的反应(在同一页面上显示元素a而不是元素B),那么我在哪里使用您提到的这些安全性呢。