当前位置: 首页 > 知识库问答 >
问题:

Thymeleaf安全方言-hasPermission()

秦凯定
2023-03-14

我们正在使用Spring Security和角色、特权以及Spring ACL。前端由Thymeleaf(版本3)渲染。应用程序用户既可以具有不同权限的角色,也可以直接访问ACL设置的某些域对象。

具体示例

我有一个表,显示由ACL保护域对象。有一些行动,我想限制由SEC:授权检查,是否允许当前的用户执行这个行动。

 <th:block th:each="securedObject: ${securedObjects}">
        <button sec:authorize="hasAuthority('DELETE') OR hasPermission(#securedObject,'ADMINISTRATION')">Delete object</button>
 </th:block>

但是,由于某种原因,hasPermission评估在这里不起作用。我无法访问本地securedObject。ACL安全性将其视为null并拒绝访问。我尝试了不同的语法(hasPermission(${securedObject},'administration')等),但没有成功。

有趣的是,它可以正确地使用sec:authorize-acl:

 <button sec:authorize-acl="${securedObject} :: 'ADMINISTRATION'">
 </button>

但是,以这种方式编写时,不可能将其与实体级别的权限(hasRole())结合起来,因此:

 <button sec:authorize-acl="${securedObject} :: 'ADMINISTRATION'" sec:authorize="hasRole('DELETE')">
 </button>

在这两者之间创建Logical and,因此用户必须同时拥有特定角色和ACL授予的访问权限。

共有1个答案

宇文曦
2023-03-14

我终于能让它运转起来了。可以使用以下表达式访问迭代中的域对象:

 <div sec:authorize="hasPermission(#vars.securedObject,'ADMINISTRATION')">Delete</div>

但是,权限评估程序仍然拒绝对该对象的访问。还需要以以下方式在Spring Security config类中配置它:

  @Configuration
  public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

        @Autowired
        private PermissionEvaluator permissionEvaluator;

        @Override
        public void configure(WebSecurity web) throws Exception {
           DefaultWebSecurityExpressionHandler handler = new 
           DefaultWebSecurityExpressionHandler();
           handler.setPermissionEvaluator(permissionEv);
           web.expressionHandler(handler);
         }

         @Override
         protected void configure(HttpSecurity http) throws Exception {
         ....
}
 类似资料:
  • 主要内容:1. 什么是标准方言?,2. 标准表达式语法,2.7 表达式预处理,3. 基本的属性本节将带您了解一些最重要的概念,以了解以标准或SpringStandard方言编写的Thymeleaf模板。 1. 什么是标准方言? Thymeleaf是非常非常可扩展的,它允许自定义的名字来定义一组模板属性(或者甚至是标签),用自定语法评估计算表达式和应用逻辑。它更像是一个模板引擎框架。 它还带有一些称为标准方言(称为Standard和SpringStandard)的东西,它们定义了一组功能,这

  • 因此,作为一个初学者,我曾尝试使用spring boot 2.2.11、spring security、thymeleaf和json web令牌创建一个ecommmerce网站,我的问题是,当用户对模板进行身份验证时,即使我在模板中放置了thymeleaf的isAnonyms和IsAuthentificated标记,模板也没有更改。 我有两个问题: 1-/如何告诉所有控制器用户已经登录? 2-/如

  • 本文向大家介绍sitecore 安全断言,包括了sitecore 安全断言的使用技巧和注意事项,需要的朋友参考一下 示例 CanRunApplication 检查用户是否有权运行给定的应用程序。如果没有,AccessDeniedException则抛出。 HasAccess HasAccess将检查给定参数是否为true,否则AccessDeniedException将抛出。          

  • 上面的代码生成一个复杂的带有标签、输入字段和错误块的div块。 我想简化这个语法。我的想法是用一个自定义标记创建一个自定义方言,并写如下: 第二个更容易阅读,它清楚地向设计者表明这是一个特殊的元素。除此之外,更改主题会更容易,因为我只需要更改标记处理器中具体的片段位置,而不是数百个th:replace值。

  • 我的自定义方言与处理器不解析任何值,我不知道为什么。在生成的视图中,${Content}应该在的地方没有任何东西,在将标签更改为th: text后,它会出现。我使用Spring Boot v1.5.9。发布,Springv4.3.13。发布 pom.xml依赖(它的子模块) LineSeparator处理器。JAVA 我的方言。JAVA 胸腺onfiguration.java 看法html

  • 有的安全措施起作用,有的不起作用。 如果我的html文件中包含以下内容: 结果是: (->但它不起作用,因为每个人都可以一直看到它) (->按预期工作) (->有效) (->正确) 正如你所看到的,其他人根本没有出现。 html标记如下所示: 我的pom.xml具有以下依赖关系: 我的SecurityConfig如下所示: 所以基本上只要和角色没有任何关系,一切都是正常的。如果它是基于角色的,那么