Skip to content

springboot starter security

lorne edited this page Mar 31, 2024 · 2 revisions

springboot-starter-security 功能介绍

支持无状态的JWT和有状态的redis两种不同的token机制

配置文件,默认参数即说明

# JWT开关codingapi.security.jwt.enable=true
# JWT密钥 需大于32位的字符串codingapi.security.jwt.secret-key=codingapi.security.jwt.secretkey
# JWT 有效时间(毫秒) 15分钟有效期 1000*60*15=900000codingapi.security.jwt.valid-time=900000
# JWT 更换令牌时间(毫秒) 10分钟后更换令牌 1000*60*10=600000codingapi.security.jwt.rest-time=600000
# JWT AES密钥codingapi.security.ase-key=QUNEWCQlXiYqJCNYQ1phc0FDRFgkJV4mKiQjWENaYXM=
# JWT AES IVcodingapi.security.ase-iv=QUNYRkdIQEVEUyNYQ1phcw==
# Redis开关#codingapi.security.redis.enable=true#spring.data.redis.host=localhost#spring.data.redis.port=6379# Security 配置 请求权限拦截地址codingapi.security.authenticated-urls=/api/**
# Security 配置 登录地址codingapi.security.login-processing-url=/user/login
# Security 配置 登出地址codingapi.security.logout-url=/user/logout
# Security 配置 不拦截的地址codingapi.security.ignore-urls=/open/**
# 禁用CSRFcodingapi.security.disable-csrf=true
# 禁用CORScodingapi.security.disable-cors=true

默认账户密码

security默认的账户密码为admin/admin,可以通过重写UserDetailsService来实现自定义账户密码

@BeanpublicUserDetailsServiceuserDetailsService(PasswordEncoderpasswordEncoder) {
Stringpassword = passwordEncoder.encode("12345678");
UserDetailsadmin = User.withUsername("admin")
.password(password)
.roles("ADMIN")
.build();
UserDetailsuser = User.withUsername("user")
.password(password)
.roles("USER")
.build();
returnnewInMemoryUserDetailsManager(admin, user);
}

也可以通过数据库账户获取账户数据,请自己实现UserDetailsService接口

登录拦截

可以通过重写SecurityLoginHandler来实现自定义登录拦截,preHandle登录前的拦截处理,postHandle登录后的拦截处理

 @Bean
public SecurityLoginHandler securityLoginHandler() {
return new SecurityLoginHandler() {
@Override
public void preHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler) throws Exception {
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, LoginRequest handler, Token token) {
}
};
}

获取当前用户

通过TokenContext获取当前用户信息

@GetMapping("/user")
publicStringuser(){
returnTokenContext.current().getUsername();
}

可以通过Token的extra字段来存储用户的更多信息,然后通过TokenContext获取

@GetMapping("/user")
publicStringuser(){
returnTokenContext.current().getExtra("user");
}

Clone this wiki locally