使用Spring Security和Redis进行基于Cookie的身份验证,用于具有Java配置的RESTFul api
如何使用基于cookie的身份验证为restful api设置spring安全性 目前,我正在尝试确保一个请求有一个cookie,上面有一个sessionId,我可以根据redis进行验证 我尝试将这两个例子结合起来: 通过将这两者结合起来,我基本上实现了cookie过滤器、身份验证和SecurityContext,然后像这样连接过滤器使用Spring Security和Redis进行基于Cookie的身份验证,用于具有Java配置的RESTFul api,java,spring,spring-mvc,spring-security,spring-data,Java,Spring,Spring Mvc,Spring Security,Spring Data,如何使用基于cookie的身份验证为restful api设置spring安全性 目前,我正在尝试确保一个请求有一个cookie,上面有一个sessionId,我可以根据redis进行验证 我尝试将这两个例子结合起来: 通过将这两者结合起来,我基本上实现了cookie过滤器、身份验证和SecurityContext,然后像这样连接过滤器 @Configuration @EnableWebSecurity public class SecurityConfiguration extends W
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
//have to use Autowired here, no other way to reference Bean
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilter(cookieAuthenticationFilter()).authorizeRequests().antMatchers("*/**").hasAnyAuthority("ALLOW");
}
/**
* The FilterProxyChain with the set of filters to apply.
*
* @return The FilterProxyChain
*/
@Bean(name = "springSecurityFilterChain")
public FilterChainProxy getFilterChainProxy() {
SecurityFilterChain chain = new SecurityFilterChain() {
@Override
public boolean matches(HttpServletRequest request) {
// All goes through here
return true;
}
@Override
public List<Filter> getFilters() {
List<Filter> filters = new ArrayList<Filter>();
filters.add(cookieAuthenticationFilter());
return filters;
}
};
return new FilterChainProxy(chain);
}
@Bean
public CookieAuthenticationFilter cookieAuthenticationFilter() {
return new CookieAuthenticationFilter(redisTemplate());
}
@Bean
public JedisConnectionFactory redisConnectionFactory(){
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setUsePool(true);
jedisConnectionFactory.setHostName("localhost");//TODO: CHANGE TO CONFIG
return jedisConnectionFactory;
}
@Bean
public RedisTemplate redisTemplate(){
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
@配置
@启用Web安全性
公共类安全配置扩展了WebSecurity配置适配器{
//这里必须使用自动连线,没有其他方法引用Bean
@凌驾
受保护的无效配置(HttpSecurity http)引发异常{
http.addFilter(cookieAuthenticationFilter()).authorizeRequests().antMatchers(“*/**”).hasAnyAuthority(“允许”);
}
/**
*FilterProxy链接与要应用的过滤器集。
*
*@返回FilterProxy链
*/
@Bean(name=“springSecurityFilterChain”)
公共筛选器链路由getFilterChainProxy(){
SecurityFilterChain=新的SecurityFilterChain(){
@凌驾
公共布尔匹配(HttpServletRequest){
//一切都经过这里
返回true;
}
@凌驾
公共列表getFilters(){
列表过滤器=新的ArrayList();
添加(cookieAuthenticationFilter());
回流过滤器;
}
};
返回新的过滤器链氧(链);
}
@豆子
公共CookieAuthenticationFilter CookieAuthenticationFilter(){
返回新的CookieAuthenticationFilter(redisTemplate());
}
@豆子
public JedisConnectionFactory redisConnectionFactory(){
JedisConnectionFactory JedisConnectionFactory=新的JedisConnectionFactory();
jedisConnectionFactory.setUsePool(true);
jedisConnectionFactory.setHostName(“localhost”);//TODO:更改为配置
返回绝地连接工厂;
}
@豆子
公共RedisTemplate RedisTemplate(){
RedisTemplate RedisTemplate=新RedisTemplate();
setConnectionFactory(redisConnectionFactory());
返回模板;
}
}解决方案实际上是可行的,只需禁用WebSecurity配置适配器的默认值