@DeclareRoles是否仅限于Java Servlet类?

时间:2017-09-29 16:48:37

标签: security servlets java-ee glassfish weblogic

我试图清楚地了解可以使用@DeclareRoles注释的位置。 API简单地说:

  

由应用程序用于声明角色。它可以在类中指定。

我已成功使用@DeclareRoles与GlassFish和Payara,对于他们我可以将@DeclareRoles放在任何地方;似乎那些EE服务器将扫描并找到所有用法。我尝试将一些代码传输到WebLogic 12.2.1并在部署时开始出现一些角色错误。我将问题跟踪到WebLogic只需要在Servlet类上进行@DeclareRoles注释。

那么@DeclareRoles应该能够加入任何课程并且GlassFish / Payara行为是否正确?或者@DeclareRoles应仅限于Servlet类,并且WebLogic行为是正确的。鉴于WebLogic的历史,我倾向于认为它做得不对。

2 个答案:

答案 0 :(得分:0)

根据Java EE 7.0& 8.0规范,javax.annotation.security.DeclareRoles只需要Web容器和EJB容器支持。

换句话说,注释的类必须是EJB或servlet。

答案 1 :(得分:0)

在研究了这个之后,我发现JSR-340,Servlet 3.1规范,第15.5.1节和JSR-369,Servlet 4.0规范,第15.2.2节都说明了:

  

@DeclareRoles注释只能在类中定义   实现javax.servlet.Servlet接口或子类   物。

因此,WebLogic看起来很正确,GlassFish / Payara的行为超出了规范。