我在我的应用程序中使用了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解析那个标签。我需要一些帮助:(
答案 0 :(得分:6)
如果您使用的是Spring Boot,并且希望使用sec:authentication
或sec: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