Spring Security简单SSO

news/2024/11/24 4:58:24/

问题

简单使用Spring Security实现简单单点登录。

思路

引入Spring Security ,Spring Session Redis相关库,简单配置Spring Security实现对用户的单点登录。

解决

Maven

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><dependency><groupId>org.springframework.session</groupId><artifactId>spring-session-data-redis</artifactId>
</dependency>

这里需要引入Spring Session Redis库,这样的话,Spring Security就会默认使用Redis进行集成会话管理。这里主要关注Spring Security的使用,Spring Session Redis只介绍简单的配置。

Spring Session

spring.session.redis.flush-mode=on_save
spring.session.redis.namespace=xxx:session
spring.session.timeout=P30D
spring.data.redis.host=xxx.xxx.xxx.xxx
spring.data.redis.port=6379
spring.data.redis.password=${REDIS_PW}
spring.data.redis.database=0

这都是一些redis连接的简单配置,这里的redis主要作用为集中会话的存储。

Spring Security


import jakarta.annotation.Resource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.session.HttpSessionEventPublisher;
import org.springframework.session.security.web.authentication.SpringSessionRememberMeServices;import static org.springframework.security.config.Customizer.withDefaults;@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfiguration {@Beanpublic WebSecurityCustomizer ignoringCustomizer() {# 忽略的请求路径return (web) -> web.ignoring().requestMatchers("/users/index");}@Beanpublic UserDetailsService userDetailsService() {# 简单创建用户认证InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();manager.createUser(User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build());return manager;}@Beanpublic SpringSessionRememberMeServices rememberMeServices() {# 需要记住用户会话SpringSessionRememberMeServices rememberMeServices =new SpringSessionRememberMeServices();// optionally customizerememberMeServices.setAlwaysRemember(true);return rememberMeServices;}@Beanpublic HttpSessionEventPublisher httpSessionEventPublisher() {return new HttpSessionEventPublisher();}@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {http.cors().and().csrf().and().sessionManagement(session -> session.maximumSessions(1) # 启用Spring Security的简单SSO控制).rememberMe((rememberMe) -> rememberMe.rememberMeServices(rememberMeServices())).authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated()).formLogin(withDefaults()) # 启用 form 方式登录.httpBasic().disable();# 禁用 http basic方式登录return http.build();}
}

总结

到这里,就基本实现了Spring Security的简单SSO,达到的效果,就是用户用一个浏览器登录成功后,如果在另外一个浏览器上面再次登录,会导致把第一次登录的会话失效。这里的Spring Session Redis仅仅是提供一个集中会话管理。这里有个问题就是Spring Security发现用户如果需要登录,会默认让浏览器跳转到Spring Secuity的默认登录页面,这种作为rest api风格的后台服务非常不友好。下次我们再解决这个问题。值得注意的是@EnableMethodSecurity注解,Spring Security提供了丰富的方法层面的流程控制。

参考:

  • Session Management
  • Spring Security without the WebSecurityConfigurerAdapter
  • Breaking Changes
  • SpringBoot之SpringSecurity权限注解在方法上进行权限认证多种方式

http://www.ppmy.cn/news/836568.html

相关文章

有关SOP封装的一些总结

近来被一些封装困惑&#xff0c;查阅了大量资料&#xff0c;仍然是百思不得其解&#xff0c;今日大概的总结一下…… SOP——Small Outline Package SOIC——Small Outline Integrated Circuit SO——Small Outline 根据参考资料【http://www.xnian.com/2009/07/1614.html】所…

手工焊接SSOP贴片元件步骤总结

手工焊接SSOP贴片元件步骤总结 前言 在焊接坏了两个芯片&#xff0c;两块板子之后&#xff0c;现在终于搞清楚手工条件下怎么才能将SSOP贴片元件焊接好了。 本文总结一下手工焊接SSOP贴片元件的步骤&#xff0c;以防时间久了忘记一些小步骤。 也许该方法不太正确&#xff0…

cas sso

SSO 是英文 Single Sign On 的缩写&#xff0c;翻译过来就是单点登录。顾名思义&#xff0c;它把两个及以上个产品中的用户登录逻辑抽离出来&#xff0c;达到只输入一次用户名密码&#xff0c;就能同时登录多个产品的效果 使用 SSO 的优点很明显&#xff1a; 提升用户体验。 不…

SSO (Single Sign On)

单点登录(SingleSignOn&#xff0c;SSO)&#xff0c;就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后&#xff0c;即可获得访问单点登录系统中其他关联系统和应用软件的权限&#xff0c;同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的&…

SSO都有哪些常用的协议

SSO统一身份认证——SSO都有哪些常用的协议 单点登录(SingleSignOn&#xff0c;SSO)&#xff0c;就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后&#xff0c;即可获得访问单点登录系统中其他关联系统和应用软件的权限&#xff0c;同时这种实现是不需要管…

p3p sso

P3P是一种被称为个人隐私安全平台项目&#xff08;the Platform for Privacy Preferences&#xff09;的标准&#xff0c;能够保护在线隐私权&#xff0c;使Internet冲浪者可以选择在浏览网页时&#xff0c;是否被第三方收集并利用自己的个人信息。如果一个站点不遵守P3P标准的…

【转载】SOP SO SOIC TSSOP SSOP 封装直观比较图

可以直观看出&#xff1a; SOP 、SO、 SOIC 三者 管脚大小和间距是一样的&#xff0c;只是整体外形大小不同 TSSOP和SSOP管脚大小和间距相同&#xff0c;管脚间距明显比SOP系列的要小&#xff08;密一些&#xff09; 原链接&#xff1a;http://blog.163.com/seven_ye_love126/b…

什么是SSO?

SSO&#xff08;Single Sign On&#xff09;单点登录。SSO是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。 当…