Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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
Java Spring Security+;JSR 250&x2B;EJB3.1不工作_Java_Spring Security_Ejb 3.1_Jsr250 - Fatal编程技术网

Java Spring Security+;JSR 250&x2B;EJB3.1不工作

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

我的JEE6WebApp(主要是CDI、EJB3.1和JSF2)使用SpringSecurity3,但不使用SpringDependencyInjection或MVC。我实现了一个Spring AuthenticationProvider来处理登录。在登录期间,我根据一些自定义业务逻辑向用户添加角色

现在,我想使用JSR250注释来保护我的业务逻辑。我的业务逻辑是使用无状态EJB(版本3.1)实现的

我将Spring的上下文XML文件包括在web.XML中,如下所示:

<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();