如何使用Thymeleaf配置SpringBoot并使用sec:authentication标记

时间:2015-07-24 03:32:45

标签: spring-security spring-boot thymeleaf

我在我的应用程序中使用了spring-boot 1.2.5 + thymeleaf + spring security。

我需要在我的网站上显示用户名,经过一些研究似乎我应该使用类似的代码:

<div sec:authentication="name">The value of the "name" property of
        the authentication object should appear here.</div>

但是我没有让Thymeleaf解析那个标签。我需要一些帮助:(

5 个答案:

答案 0 :(得分:6)

如果您使用的是Spring Boot,并且希望使用sec:authenticationsec:authorize,请不要忘记在pom.xml中包含依赖项

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

答案 1 :(得分:5)

你必须做三件事:

注册组件:

@Bean
public SpringTemplateEngine templateEngine(TemplateResolver templateResolver) {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
templateEngine.addDialect(new SpringSecurityDialect());
return templateEngine;
}

添加百里香安全定义

    <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:th="http://www.thymeleaf.org"
    xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">

最后添加到您的gradle repo:

compile("org.thymeleaf:thymeleaf-spring4")
compile("org.thymeleaf.extras:thymeleaf-extras-springsecurity4")

答案 2 :(得分:1)

您需要在项目中添加Spring Security 3集成模块。这些模块是Thymeleaf方言,相当于Spring安全标签lib。这些是百万美元的额外模块,不属于Thymeleaf核心。

在模板引擎中只需添加集成模块方言即可。

<bean id="templateEngine" class="org.thymeleaf.spring3.SpringTemplateEngine">
 ...
  <property name="additionalDialects">
    <set>
      <bean class="org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect"/>
    </set>
  </property>
  ...
</bean>

添加模块后,您可以使用以下代码:

<div sec:authentication="name">The value of the "name" property of
    the authentication object should appear here.</div>

可以找到Thymeleaf等效模块here。 另请参阅此Step by Step tutorial of TheymeLeaf

更新:

如果您使用的是Spring Boot,则只需在pom.xml中添加依赖项或在项目中添加jar。

答案 3 :(得分:0)

That is a special cat That's an average cat 我也遇到了问题。我花了很多时间试图完成这项工作。在我意识到问题是注册新方言后,我尝试注册它们,但没有任何对我有用。 最后,我收集了来自互联网的一些代码 xmlns:sec 开始工作。 我已经结合了maven依赖项创建了一个简单的项目。这是春季靴+百里香叶+春季安全。

我有弹簧靴(不是弹簧3或4)+百里香叶+弹簧安全,一起工作正常。 Config是基于java的,而不是xml。

链接到项目https://github.com/hackofi/springboot-sec

的pom.xml

sec:authorize="hasRole('USER')

WebConfig.java

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.2.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-springsecurity4</artifactId>
        <version>2.1.2.RELEASE</version>
    </dependency>
</dependencies>

<properties>
    <java.version>1.8</java.version>
</properties>


<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

WebSecurityConfig.java

@Configuration
@EnableWebMvc
@EnableConfigurationProperties
@ComponentScan(basePackages = "cz.vse")
public class WebConfig extends WebMvcConfigurerAdapter {

    @Autowired
    private Environment environment;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("/static/");
    }


    @Bean
    public TemplateResolver templateResolver() {
        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
        templateResolver.setPrefix("/WEB-INF/views/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("HTML5");
        return templateResolver;
    }
    @Bean
    public SpringTemplateEngine templateEngine(TemplateResolver templateResolver) {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        templateEngine.addDialect(new SpringSecurityDialect());
        return templateEngine;
    }
    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(templateResolver());
        return templateEngine;
    }

    @Bean
    public ViewResolver viewResolver() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        viewResolver.setOrder(1);
        return viewResolver;
    }
}

答案 4 :(得分:0)

在Spring Boot中,除了添加编译依赖项外:

$this->table($headers, $tableData);

我必须为方言添加一个bean:

compile 'org.thymeleaf.extras:thymeleaf-extras-springsecurity3:'2.1.3.RELEASE'

只有这样,Spring Boot的自动配置通过询问所有@Bean IDialect springSecurityDialect() { new SpringSecurityDialect() } bean的上下文来获取方言:

IDialect