用户登录认证和权限授权(SpringSecurity、JWT、session)
在Spring Security和JWT结合的情况下,用户登录验证和权限授权的核心步骤如下:
- 用户提交登录信息,后端接收并验证。
- 验证成功后,生成JWT token,并移除session。
- 返回JWT token给客户端。
- 客户端将JWT token存储下来,并在后续请求中携带。
- 后端接收请求,解析JWT token获取用户信息。
- 根据用户权限配置,授予访问资源的权限。
以下是核心代码示例:
SecurityConfig.java:Spring Security配置
@Override
protected void configure(HttpSecurity http) throws Exception {
http
// 其他配置
.csrf().disable() // 禁用CSRF保护
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) // 无状态会话管理
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager())); // 添加JWT认证过滤器
}
JwtAuthenticationFilter.java:JWT认证过滤器
public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
// ...
@Override
public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException {
// 获取用户凭证
// ...
// 返回认证结果
return authenticationManager.authenticate(authenticationToken);
}
@Override
protected void successfulAuthentication(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain,
Authentication authentication) {
// 生成JWT token
String token = Jwts.builder()
.setSubject(user.getUsername())
.setExpiration(new Date(System.currentTimeMillis() + SecurityConstants.EXPIRATION_TIME))
.signWith(SignatureAlgorithm.HS512, SecurityConstants.SECRET_KEY)
.compact();
// 移除session
request.getSession().invalidate();
// 添加token到响应头
response.addHeader(SecurityConstants.HEADER_STRING, SecurityConstants.TOKEN_PREFIX + token);
}
}
SecurityConstants.java:安全常量定义
public class SecurityConstants {
public static final long EXPIRATION_TIME = 864000000; // 10 days
public static final String SECRET_KEY = "Your_Secret_Key";
public static final String HEADER_STRING = "Authorization";
public static final String TOKEN_PREFIX = "Bearer ";
}
ResourceServerConfig.java:资源服务器配置
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
评论已关闭