gpt4 book ai didi

java - Thymeleaf Security 不适用于 Spring Boot 1.3.5

转载 作者:行者123 更新时间:2023-11-29 08:43:47 25 4
gpt4 key购买 nike

我正在尝试让我的 Web 应用程序再次使用新的 Spring Boot 版本 1.3.5,但 thymeleaf 方言似乎不再有效。

我加了

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

到我的 .pom,甚至在我的安全配置中注册了一个 bean:

@Bean
public SpringSecurityDialect springSecurityDialect(){
SpringSecurityDialect dialect = new SpringSecurityDialect();
return dialect;
}

(尽管我认为 spring boot 无论如何都会为我做这件事)。 Wen 使用诸如 e. 这样的表达方式。 G。

<li sec:authorize="hasRole('SITE_ADMIN') || hasRole('TENANT_ADMIN')">Admin 
</li>

虽然我可以将我的自定义用户元素注入(inject)到 Controller 中,但该表达式不会被渲染,因为该角色似乎为空:

@RequestMapping(value="/", method=RequestMethod.GET)
public String homePage(@AuthenticationPrincipal VZUser user, Model model){
model.addAttribute("email", user.getEmail());
return "home/index";
}

从调试中,我看到注入(inject)的 Principal 对象不为空,但模板似乎无法解析 sec: 对象。我删除了 xmlns 命名空间并重新插入它没有效果。坦率地说,有关此功能的文档非常令人震惊。我有什么想念的吗?

哦对了。在 Spring Boot 1.3.2 中可以使用相同的代码(没有新的依赖项并在 xhtml 模板中使用 namespace 声明)...

更新

我认为这与我使用自定义 UserDetailsS​​ervice 这一事实有关。我对内存服务没有任何问题。然而,我的自定义用户实现只有以下内容:

@Override
public Collection<? extends GrantedAuthority> getAuthorities(){
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
for(VZUserRoles role: roles){
authorities.add(new SimpleGrantedAuthority(role.name()));
}
return authorities;
}

我定义了一个基本的 UserDetails 服务并将其放入 AuthenticationMAnagerBuilder。身份验证工作正常,它似乎没有传递给 View 。

最佳答案

实际上,您不需要定义 SpringSecurityDialect bean,它已由 Spring Boot 自动配置为您完成。

我在这里的示例中没有发现任何错误,并且我已尝试重现该问题但没有成功。

具有以下依赖关系:

     <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf.extras</groupId>
<artifactId>thymeleaf-extras-springsecurity4</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

一个简单的 Controller :

@Controller
public class HomeController {

@RequestMapping("/")
public String home() {
return "index";
}
}

自定义安全配置:

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("brian").password("password").roles("USER");
}

}

index.html 模板:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
<meta charset="utf-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
</head>
<body>
<h2>Thymleaf example</h2>
<p sec:authorize="hasRole('ROLE_USER')">
Authenticated
</p>
<p th:text="${#authentication.principal.username}">the_username</p>
</body>
</html>

一切都按预期进行。

欢迎调用create an issue一旦你有了 minimal repro project .

关于java - Thymeleaf Security 不适用于 Spring Boot 1.3.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37996864/

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