相关疑难解决方法(0)

Spring MVC 角色和管理员权限

我是 spring mvc 的新手,在我现有的项目中,有一个管理员,他们有权更新数据,但现在我需要创建 2 个新管理员,admin1 和 admin2,它们在登录时只能看到有限的页面,例如:

当管理员登录时,他们可以在菜单栏中看到添加数据、更新数据、发布消息页面。但在 Admin1 的情况下,只能在菜单栏中看到 Post meassage 页面。

所以,请指导我如何在 spring mvc 中完成这项任务 提前致谢。

java spring web-applications spring-mvc user-roles

6
推荐指数
1
解决办法
4205
查看次数

定义具有继承权限的用户角色

我目前正在研究 spring-security 框架 - 到目前为止很棒的东西,给人留下了深刻的印象。但是,我还没有找到在哪里或如何定义权限继承。

例如,我希望 ROLE_ADMIN 至少具有与 ROLE_USER 相同的权限。我为 spring 定义了三个拦截网址:

 <intercept-url pattern="/auth/login.do" access="permitAll"/>
 <intercept-url pattern="/voting/*" access="hasRole('ROLE_USER')"/>
 <intercept-url pattern="/admin/*" access="hasRole('ROLE_ADMIN')"/>
Run Code Online (Sandbox Code Playgroud)

当我以 ROLE_ADMIN 用户身份登录时,尝试访问从 /voting/ 嵌套的任何站点时,我被拒绝了。我在这里错过了什么吗?我知道,我可以为 /voting/* 分支定义多个角色,但是如果我想象在我的一个现实用例中可能有 10 个不同的用户角色,我可以想象 .xml 文件变得非常混乱,真的快速地。

我可以在某处配置角色的继承吗?

干杯

编辑:

感谢伟大的社区和他们的投入,我想出了一个可行的解决方案 - 它可能是好的风格与否 - 它有效:D

我定义了一个枚举,它反映了继承的 spring-sec 角色:

public enum UserRoles {
     ROLE_USER(new String[]{"ROLE_USER"}),
     ROLE_ADMIN(new String[]{"ROLE_USER", "ROLE_ADMIN"});
     private final String[] roles;

     private UserRoles(String[] roles) {
          this.roles = roles;
     }

     public String[] getRoles() {
          return roles;
     }
}
Run Code Online (Sandbox Code Playgroud)

然后我实现了我自己的 UserDetailsS​​ervice:

在方法内

@Override
public UserDetails loadUserByUsername(String username) …
Run Code Online (Sandbox Code Playgroud)

spring rights spring-security security-roles

3
推荐指数
1
解决办法
3348
查看次数

如果使用RoleHierarchyImpl,则为AccessDeniedException

我在Spring Security中使用角色层次结构.

<beans:bean id="roleVoter" class="org.springframework.security.access.vote.RoleHierarchyVoter">
    <beans:constructor-arg ref="roleHierarchy" />
</beans:bean>

<beans:bean id="roleHierarchy"
        class="org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl">
    <beans:property name="hierarchy">
        <beans:value>
            ROLE_USER > ROLE_GUEST
        </beans:value>
    </beans:property>
</beans:bean>
Run Code Online (Sandbox Code Playgroud)

我正在使用保护切入点来保护方法

<global-method-security secured-annotations="enabled" pre-post-annotations="enabled">
  <protect-pointcut expression="execution(* my.package.*(..))"
     access="ROLE_GUEST"/>
</global-method-security>
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用具有权限ROLE_USER的用户登录,则会出现AccessDeniedException.如果我指定了protect-pointcut,我没有问题access="ROLE_GUEST,ROLE_USER".

我错过了一些步骤吗?仅供参考,我使用的是Spring 3.0.5.

谢谢.

spring spring-security

3
推荐指数
1
解决办法
3028
查看次数