Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Spring Security和Redis进行基于Cookie的身份验证,用于具有Java配置的RESTFul api_Java_Spring_Spring Mvc_Spring Security_Spring Data - Fatal编程技术网

使用Spring Security和Redis进行基于Cookie的身份验证,用于具有Java配置的RESTFul api

使用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

如何使用基于cookie的身份验证为restful api设置spring安全性

目前,我正在尝试确保一个请求有一个cookie,上面有一个sessionId,我可以根据redis进行验证

我尝试将这两个例子结合起来:

通过将这两者结合起来,我基本上实现了cookie过滤器、身份验证和SecurityContext,然后像这样连接过滤器

@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配置适配器的默认值