gpt4 book ai didi

java - 基于角色 Springboot+Thymeleaf 禁用/启用 Html 元素

转载 作者:行者123 更新时间:2023-11-30 06:46:21 27 4
gpt4 key购买 nike

我有一个具有多个角色(ROLE1、ROLE2)的安全 springboot 应用程序。一个用户具有两种角色,而另一个用户只有一种。成功登录后,用户将被发送到登录页面,如果用户只有一个角色,我想在那边禁用元素。

我尝试过使用 thymeleaf-extras-springsecurity3 但没有成功。这是我的代码:

Pom.xml

...
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity3</artifactId>
<version>3.0.2.RELEASE</version>
</dependency>
...

landing.html(尝试了所有选项)

!${currentUser.user.hasAuthority('ROLE1')}
!${#authorization.expression('hasRole('ROLE1')')}
${#authentication.getPrincipal().getUser().getRoles()}
${#authentication.getPrincipal().getRoles()}

但是没有成功,我总是得到像这样的那个对象的空错误

org.springframework.expression.spel.SpelEvaluationException: EL1011E: Method call: Attempted to call method getPrincipal() on null context object

任何帮助将不胜感激!谢谢!

最佳答案

我认为 recommended方法是使用 xmlns:sec="http://www.thymeleaf.org/extras/spring-security" 命名空间来实现你想要的结果 sec:authorize="hasRole(' ROLE_ADMIN')”

<html xmlns:th="http://www.thymeleaf.org" 
xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>...</head>
<body>
<div sec:authorize="hasRole('ROLE_ADMIN')">...</div>

// or use #authorization, but use escape quote 'hasRole(''ROLE_USER'')'
<div th:if="${#authorization.expression('hasRole(''ROLE_USER'')')}">...</div>
</body>

您可能(我认为 spring-boot 默认情况下会这样做)还必须配置 SpringSecurityDialect 才能使其工作。

 @Bean
public TemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver());
engine.addDialect(securityDialect());
return engine;
}

private IDialect securityDialect(){
SpringSecurityDialect dialect = new SpringSecurityDialect();
return dialect;
}

另请参阅类似问题:Spring Security hasRole() not working

关于java - 基于角色 Springboot+Thymeleaf 禁用/启用 Html 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47699798/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com