springboot拦截器jwt
时间: 2025-01-02 11:30:00 浏览: 11
### Spring Boot 中实现 JWT 拦截器
在Spring Boot应用中集成JWT(JSON Web Token)用于认证和授权,通常会通过自定义拦截器或过滤器来处理HTTP请求。下面展示一种常见的做法,即创建一个名为`JwtRequestFilter.java`的类作为过滤器[^2]。
#### 创建 JwtRequestFilter 类
此Java类负责提取并验证传入请求中的Token有效性:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class JwtRequestFilter extends OncePerRequestFilter {
@Autowired
private MyUserDetailsService userDetailsService;
@Autowired
private JwtUtil jwtUtil;
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain chain) throws ServletException, IOException {
final String authorizationHeader = request.getHeader("Authorization");
String username = null;
String jwt = null;
if (authorizationHeader != null && authorizationHeader.startsWith("Bearer ")) {
jwt = authorizationHeader.substring(7);
try{
username = jwtUtil.extractUsername(jwt); // 解析token获取用户名
}catch(Exception e){
logger.error(e.getMessage());
}
}
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
UserDetails userDetails = this.userDetailsService.loadUserByUsername(username);
if (jwtUtil.validateToken(jwt, userDetails)) { // 验证token合法性
UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
chain.doFilter(request, response);
}
}
```
上述代码片段展示了如何构建一个简单的JWT请求过滤器,它会在每次接收到新的HTTP请求时自动触发执行。当检测到有效的JWT令牌后,则设置当前线程的安全上下文以便后续操作能够识别已认证的身份信息。
#### 应用程序配置文件(application.yml)
为了让应用程序知道去哪里查找这些安全相关的属性值,可以在项目的根目录下找到`application.yml`文件,并添加如下所示的内容以指定密钥和其他必要的参数[^4]:
```yaml
# JWT 配置
jwt:
secret: your_secret_key_here # 替换成实际使用的秘钥字符串
expiration: 86400 # 设置过期时间为一天(秒)
header: "Authorization"
token-prefix: "Bearer "
```
以上就是关于如何在Spring Boot框架内利用JWT技术完成身份验证机制的大致流程说明。需要注意的是,在真实环境中还需要考虑更多细节问题比如异常处理、日志记录等。
阅读全文