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

基于角色SpringBoot+Thymeleaf禁用/启用Html元素

朱鸿畅
2023-03-14

我有一个具有多个角色(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>
...
!${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

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

共有1个答案

雷逸仙
2023-03-14

我认为推荐的方法是使用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>

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

 @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()不工作

 类似资料:
  • 我有一个php页面home.php 在这个php页面中,我有一个php变量,并且我正在使用操作前类HTMLrender提供将内容替换为html模板的常用方法。现在,基于变量,我需要禁用Create超链接。 但我遇到了编译时错误。 如何禁用基于php变量的锚标记。

  • 我是oAuth2安全系统的新手。关于访问REST资源的基于用户角色的授权,我有一个问题。我的互联网冲浪提供了关于oauth2的身份验证部分的输入。 让我提供给你困扰我的情况。

  • 因此,在我们的Laravel应用程序中有两个角色(internet客户端和管理员)。下面是DB模式 我们想允许www.site。com/登录路径,仅记录具有“客户端”角色的用户。 请注意,一旦用户登录并强制注销,我们不想检查角色。 谢谢

  • 本文展示了如何根据不同的用户角色,在登录之后来重定向到不同的页面。 在 method-security项目的基础上,我们构建了一个role-base-login项目。 build.gradle 修改 build.gradle 文件,让我们的role-base-login项目成为一个新的项目。 修改内容也比较简单,修改项目名称及版本即可。 jar { baseName = 'role-bas

  • 我需要在html中用动态值填充元标记的内容属性。我正在使用带thymeleaf模板引擎的Spring boot。我试图寻找一个解决方案,但所有的解决方案要么零零碎碎,要么不能直接回答我的问题。由于我的项目的性质,我不想使用JQuery或任何其他javascript框架,因此发布了这个查询。 已经尝试了各种胸片开箱即用功能 我使用url标记来包含从我的控制器传递的实际url

  • 问题内容: 我打算将Ext JS用于大型应用程序。该应用程序的功能基于角色。用户登录时,他们只会看到与其相关的菜单和屏幕功能。我的服务器端技术将是Java和JSP。 为了解决这个问题,我有两个想法 。1.使用服务器端技术在用户登录后动态创建与Ext JS相关的javascript。Servlet / JSP将根据用户角色创建必要的est js代码。 2.具有在视图JSP中设置的Js变量,这些变量将