当前位置: 首页 > 知识库问答 >
问题:

基于Cookie的身份验证,使用Spring Security和Redis,实现了一个带有Java配置的RESTFul api

东门修能
2023-03-14

如何使用基于cookie的身份验证为restful api设置Spring Security性?

目前,我试图确保一个请求有一个cookie,上面有一个seshtml" target="_blank">ionId,我可以对redis进行验证。

我试着把这两个例子结合起来:

http://sleeplessinslc.blogspot.com/2012/02/spring-security-stateless-cookie-based.html

https://spring.io/guides/tutorials/rest/5/

通过将这两者结合起来,我基本上实现了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;
}

}

共有1个答案

南宫浩皛
2023-03-14

解决方案实际上是可行的,只需禁用WebSecurity配置适配器的默认值。

 类似资料:
  • 问题内容: 我是新手,由于良好的在线评论,决定尝试一下。我正在尝试使用scrapy登录到一个网站。我已经通过selenium的组合成功登录了,并通过收集所需的selenium饼干并将其添加到机械化中进行了机械化。现在,我正在尝试对selenium和selenium进行类似的处理,但似乎无法使任何事情起作用。我什至无法分辨是否有任何工作。谁能帮帮我吗。我是从下面开始的。我什至不需要用曲奇的方式来传送

  • 我读了一些关于“JWT vs Cookie”的帖子,但它们只会让我更加困惑…… > 我想澄清一下,当人们谈论“基于令牌的身份验证与cookie”时,这里的cookie仅指会话cookie?我的理解是,cookie就像一个介质,它可以用来实现基于令牌的身份验证(在客户端存储可以识别登录用户的东西)或者基于会话的身份验证(在客户端存储与服务器端会话信息匹配的常量) 为什么我们需要JSON web令牌?

  • 我有一个具有两个组件的服务器应用程序:a)一组使用oAuth(Spring security oAuth)保护的REST API,b)一个用于基于角色UI的管理的仪表板 出于业务原因,这两个组件需要共同托管,即作为单个WAR部署。到目前为止,我们的REST API只有oAuth,一切都很好。当我们试图对仪表板使用基于表单的身份验证时,问题就开始了。现在,当我们在没有oAuth令牌的情况下访问RES

  • 有人能给我一个逐步描述如何基于cookie的身份验证工作吗?我从来没有做过任何涉及身份验证或cookie的事情。浏览器需要做什么?服务器需要做什么?按什么顺序?我们怎么保证东西安全?

  • 本文向大家介绍Asp.Net Core中基于Session的身份验证的实现,包括了Asp.Net Core中基于Session的身份验证的实现的使用技巧和注意事项,需要的朋友参考一下 在Asp.Net框架中提供了几种身份验证方式:Windows身份验证、Forms身份验证、passport身份验证(单点登录验证)。 每种验证方式都有适合它的场景: 1.Windowss身份验证通常用于企业内部环境,

  • 问题内容: 我想我丢失了一些东西,因为我在文档中找不到如何编写供Redis实例与sidekiq一起使用的用户名和密码。 有没有办法做到这一点?还是通过ENV变量? 问题答案: Sidekiq将无法识别的redis选项直接传递给Redis驱动程序: Redis没有用户的概念,因此只有密码。