【问题标题】:Show different web pages and elements depending on the user Role and Privilege根据用户角色和权限显示不同的网页和元素
【发布时间】:2015-09-02 20:25:06
【问题描述】:

我有一个带有 Thymeleaf 作为模板引擎和 Spring Security 来管理登录阶段的 Spring MVC Web 应用程序。

我的用户可以使用不同的角色(ROLE_ADMIN、ROLE_USER 和 ROLE_GUEST)登录。 此外,具有角色 ROLE_USER 的用户是一个或多个工作组(一组用户)的一部分,并且在工作组中他/她可以使用不同的权限进行操作:WG_ADMIN、WG_USER、WG_GUEST。 每个权限都允许 WG 用户对 WG 资源执行一些操作。

现在我有一组视图,想根据用户的角色和 WG 权限管理对页面和页面元素的授权。

使用 Spring MVC 和 Thymeleaf 完成工作的规范方法是什么?

谢谢

【问题讨论】:

    标签: java spring spring-mvc spring-security thymeleaf


    【解决方案1】:

    您可以使用以下内容:

    <div sec:authorize="hasRole('ROLE_ADMIN')">
        Hi, <span sec:authentication="principal.name"></span> 
    </div>
    

    【讨论】:

      【解决方案2】:

      您需要@PreAuthorize 和@Secured 的组合。我会告诉你有什么区别。您的控制器方法应使用@PreAuthorize 进行注释。这样,如果用户没有 ROLE,则根据您的安全设置重定向用户。

      使用@Secured,如果用户没有角色,则不会执行该方法。所以你应该在服务层使用@Secured。

      你需要这样的东西。

      @PreAuthorize(hasRole('ROLE_ADMIN'||'ROLE_USER'))
      @RequesMapping(value="/doblahblah")
      public String doBlahBlahh(){
          methodOnlyAdminCanExecute();
          methodOnlyUserCanExecute();
      }
      
      @PreAuthorize(hasRole('ROLE_USER'))
      @RequesMapping(value="/douserstuff")
      public String douserstuff(){
          methodOnlyAdminCanExecute();
          methodOnlyUserCanExecute();
      }
      

      服务层:

      public class adminCode{
      
      @Secured("ROLE_ADMIN")
      public void doAdminStuff(){
      //dostuff
      }
      
      }
      

      现在,即使在第二个控制器方法中,该方法被调用,它也不会执行,@Secured注解将被处理,该方法不会执行。

      这是我从你的问题中了解到的。如果这不是您要查找的内容,我将删除我的答案。

      【讨论】:

      • 谢谢,我认为这是解决方案的一部分。至于某些元素的 GUI 可视化,尽管其他元素取决于用户的角色和权限,我是否应该使用 Thymeleaf 的 sec:authorize 和 sec:authentication 属性使用@GingerHead 解决方案?
      • 可以,但是有人可以从greasemonkey改html、JS代码
      • 那么我怎样才能防止用户看到管理菜单项,例如?此外,此链接中描述的配置可以以某种方式帮助我吗? docs.spring.io/spring-security/site/docs/3.2.7.RELEASE/…
      • 你不能,除非你涉及到后端。通过从后端检索它是唯一的选择。检查角色,然后适当添加菜单项的model.attributes。这样,即使有人在前端操作内容,也没有任何用处。
      • 关于链接,只是初始配置,没有别的。当然,您可以说,谁可以访问哪个请求映射,但与 atPreAuthorized 和 atSecured 相比没有那么灵活。
      猜你喜欢
      • 2015-08-23
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 2020-10-20
      • 1970-01-01
      • 2015-07-20
      相关资源
      最近更新 更多