-
Notifications
You must be signed in to change notification settings - Fork 48
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=900000 codingapi.security.jwt.valid-time=900000 # JWT 更换令牌时间(毫秒) 10分钟后更换令牌 1000*60*10=600000 codingapi.security.jwt.rest-time=600000 # JWT AES密钥 codingapi.security.ase-key=QUNEWCQlXiYqJCNYQ1phc0FDRFgkJV4mKiQjWENaYXM= # JWT AES IV codingapi.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/** # 禁用CSRF codingapi.security.disable-csrf=true # 禁用CORS codingapi.security.disable-cors=true
security默认的账户密码为admin/admin,可以通过重写UserDetailsService来实现自定义账户密码
@Bean public UserDetailsService userDetailsService(PasswordEncoder passwordEncoder) { String password = passwordEncoder.encode("12345678"); UserDetails admin = User.withUsername("admin") .password(password) .roles("ADMIN") .build(); UserDetails user = User.withUsername("user") .password(password) .roles("USER") .build(); return new InMemoryUserDetailsManager(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") public String user(){ return TokenContext.current().getUsername(); }
可以通过Token的extra字段来存储用户的更多信息,然后通过TokenContext获取
@GetMapping("/user") public String user(){ return TokenContext.current().getExtra("user"); }