Java Spring Security+;JSR 250&x2B;EJB3.1不工作
我的JEE6WebApp(主要是CDI、EJB3.1和JSF2)使用SpringSecurity3,但不使用SpringDependencyInjection或MVC。我实现了一个Spring AuthenticationProvider来处理登录。在登录期间,我根据一些自定义业务逻辑向用户添加角色 现在,我想使用JSR250注释来保护我的业务逻辑。我的业务逻辑是使用无状态EJB(版本3.1)实现的 我将Spring的上下文XML文件包括在web.XML中,如下所示:Java Spring Security+;JSR 250&x2B;EJB3.1不工作,java,spring-security,ejb-3.1,jsr250,Java,Spring Security,Ejb 3.1,Jsr250,我的JEE6WebApp(主要是CDI、EJB3.1和JSF2)使用SpringSecurity3,但不使用SpringDependencyInjection或MVC。我实现了一个Spring AuthenticationProvider来处理登录。在登录期间,我根据一些自定义业务逻辑向用户添加角色 现在,我想使用JSR250注释来保护我的业务逻辑。我的业务逻辑是使用无状态EJB(版本3.1)实现的 我将Spring的上下文XML文件包括在web.XML中,如下所示: <context-p
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/applicationContext-security.xml
</param-value>
</context-param>
但是,只有role_USER的用户也可以访问此类的任何函数。在使用以下代码进行调试时,我验证了用户没有错误的角色:
Collection<? extends GrantedAuthority> authorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Collection默认情况下,Spring安全性使用,仅限于由Spring应用程序上下文创建的bean。生命周期不受Spring控制的对象(如EJB)不会受到影响。同样,如果使用new
或其他框架创建对象实例,则会根据需要创建对象
将方法安全拦截器应用于所有对象实例的唯一选项是使用Aspectj。问题的答案可能是一个很好的开始。Eiks,这不是我希望的答案:-/JEE6在定制安全性方面非常弱,但是如果JSR注释不起作用,将其与Spring安全性结合起来也不是真正的解决方案。更糟糕的是,在安全方面,JEE7似乎没有任何改进计划。
@Model
@RolesAllowed("ROLE_GROUP")
public class UserListAction {
Collection<? extends GrantedAuthority> authorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities();