Spring boot 如何让 Thymeleaf 网页和 REST API 具有不同的身份验证方案
Posted
技术标签:
【中文标题】Spring boot 如何让 Thymeleaf 网页和 REST API 具有不同的身份验证方案【英文标题】:Spring boot how to have Thymeleaf web page and REST API with different authentications Schemes 【发布时间】:2020-09-08 04:32:03 【问题描述】:就像问题说的那样,我们如何配置 Spring Security 以对项目的 Thymeleaf 网页部分进行表单身份验证,并为项目的 REST API 部分进行 JWT 身份验证?,因为我们希望这两个项目都在相同的容器,而不必为外部 Tomcat 应用程序服务器提供资源以具有相同的安全配置(SSL、密码、证书等)。
到目前为止,我们还没有找到方法,但是如果您可以在同一个项目上拥有 Thymeleaf 和 REST API,我认为可以将 Spring Security 配置为必须对项目进行身份验证。
【问题讨论】:
【参考方案1】:您可以通过添加两个WebSecurityConfigurerAdapter
bean 来实现此行为,如下所示:
@Order(1) - /api/** 受基本身份验证保护,在您的情况下为 JWT 身份验证。
@Order(2) - /website/** 受表单登录保护,在您的情况下 Thymeleaf 登录。
查看Spring Boot 的文档和示例代码here。
@EnableWebSecurity
public class SecurityConfig
@Configuration
@Order(1)
public class ApiSecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http
.antMatcher("/api/**")
.authorizeRequests()
.anyRequest().hasRole("API_USER")
.and()
.httpBasic();
@Configuration
@Order(2)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http.csrf().disable()
.authorizeRequests()
.antMatchers("/website/**").hasRole("ADMIN")
.and()
.formLogin()
.and()
.logout().permitAll()
;
【讨论】:
感谢您的帮助以上是关于Spring boot 如何让 Thymeleaf 网页和 REST API 具有不同的身份验证方案的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot + Thymeleaf Security 无法识别
在 Spring Boot 应用程序中使用 JSP 和 Thymeleaf 视图
Thymeleaf + Spring (not Boot) - 如何显示来自 messageSource 的消息