Я пытаюсь интегрировать свой проект SpringMVC и Thymeleaf с Spring Security. Я обнаружил, что это обычный вопрос, но я попробовал решения, и у меня никто не работает.
Я добавил в свою конфигурацию класс org.thymeleaf.spring4.SpringTemplateEngine, но это не сработало.
Spring-security.xml
<beans:beans xmlns = "http://www.springframework.org/schema/security"
xmlns:beans = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-4.2.xsd">
<http auto-config = "true" use-expressions = "true">
<intercept-url pattern = "/admin**" access = "hasRole('ROLE_ADMIN')" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name = "usuario" password = "123456" authorities = "ROLE_USER" />
</user-service>
<password-encoder ref = "passwordEncoder" />
</authentication-provider>
</authentication-manager>
<beans:bean id = "passwordEncoder"
class = "org.springframework.security.crypto.password.NoOpPasswordEncoder" factory-method = "getInstance" />
<beans:bean id = "templateEngine" class = "org.thymeleaf.spring4.SpringTemplateEngine">
<beans:property name = "additionalDialects">
<beans:set>
<beans:bean class = "org.thymeleaf.extras.springsecurity4.dialect.SpringSecurityDialect"/>
</beans:set>
</beans:property>
</beans:bean>
</beans:beans>
Страница:
<!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">
<head>
<title>Home</title>
</head>
<body
<div sec:authorize = "hasRole('ROLE_USER')">Text visible to user.</div>
<div sec:authorize = "hasRole('ROLE_ADMIN')">Text visible to admin.</div>
<div sec:authorize = "isAuthenticated()">
Text visible only to authenticated users.
</div>
<h4>Spring security.</h4>
</body>
</html>
pom.xml
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
<version>3.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>5.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>3.0.9.RELEASE</version>
</dependency>
Он показывает весь этот контент пользователям, прежде чем вы войдете в него. Не могли бы вы мне помочь пожалуйста?
Я не могу, потому что в моем проекте есть версия Spring 4.3.
Вы пробовали использовать hasAuthority вместо hasRole?
sec:authorize = "hasAuthority('ADMIN')"
Похоже, что hasRole не работает для Spring 4.
Это вопрос версии.
Страница:
xmlns:sec = "http://www.thymeleaf.org/thymeleaf-extras-springsecurity5"
:
<div sec:authorize = "hasAuthority('ROLE_USER')">..</div>
pom.xml
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
<version>3.0.11.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity5</artifactId>
<version>3.0.4.RELEASE</version>
</dependency>
Вы пробовали эту версию тимелеафа-extras-springsecurity5?