Spring REST security - 以不同的方式保护不同的 URL
Posted
技术标签:
【中文标题】Spring REST security - 以不同的方式保护不同的 URL【英文标题】:Spring REST security - Secure different URLs differently 【发布时间】:2016-01-07 08:39:19 【问题描述】:我在 Spring 4 下使用基本身份验证工作 REST API。这些 REST 服务位于 /api/v1/** URL 下。但是,我想在不同的 url /api/v2/** 下添加另一组 REST 端点,但受基于令牌的身份验证保护。
是否可以用一个 servlet 做到这一点?如何配置 Spring Security 以对不同的 URL 使用不同形式的身份验证?
谢谢。
【问题讨论】:
你应该能够在你的 spring security applicationContext 中拥有不止一个入口点,你可以在其中指定你的拦截 url 模式。 您的意思是更多受保护的 void configure(HttpSecurity http) 方法,每个方法都适用于每个 URL 模式?你能给我一个例子来说明你的意思吗?谢谢。 我只使用过基于 xml 的 spring security 设置,据我所知,它可以设置多个下面是 Java 配置中的代码示例,它使用 UserDetailsService
并且针对不同的 URL 端点具有不同的安全配置:
@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
@Autowired
UserDetailsService userDetailsService;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception
auth.userDetailsService(userDetailsService);
@Configuration
@Order(1)
public static class ApiWebSecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http
.antMatcher("/api/v1/**")
.httpBasic()
.realmName("API")
.and()
.csrf().disable()
.authorizeRequests()
.antMatchers("/api/v1/**").authenticated();
@Configuration
@Order(2)
public static class ApiTokenSecurityConfig extends WebSecurityConfigurerAdapter
@Override
protected void configure(HttpSecurity http) throws Exception
http
.antMatcher("/api/v2/**")
/* other config options go here... */
【讨论】:
我的用例略有不同。是否可以配置/api/**
使用基本身份验证和剩余应用程序使用表单登录?
是的。在 API 安全配置的第一行中使用 http.antMatcher("/api/**")
,在应用程序的其余部分的配置中使用 http.requestMatcher(new NegatedRequestMatcher(new AntPathRequestMatcher("/api/**")))
。
如果我想为每个端点使用不同的 userDetailsService 怎么办?以上是关于Spring REST security - 以不同的方式保护不同的 URL的主要内容,如果未能解决你的问题,请参考以下文章
Spring(Websockets / REST / Security)、JWT 和 Sockjs(Stomp)集成
Spring Security:测试和理解 REST 身份验证
REST Security with JWT using Java and Spring Security
Spring MVC REST + Spring Security + 基本身份验证