spring boot——请求与参数校验——response对象输出字符数据

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一份使用 Spring Boot 和 MyBatis Plus 实现 Token 校验的示例代码: 1. 首先,我们需要在 pom.xml 文件中添加相关依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatis.plus.version}</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>${jjwt.version}</version> </dependency> ``` 其中,`${spring.boot.version}`、`${mybatis.plus.version}` 和 `${jjwt.version}` 分别表示 Spring Boot、MyBatis Plus 和 JWT 的版本号,可以根据需要进行修改。 2. 创建一个 TokenUtils 工具类,用于生成和解析 JWT: ```java public class TokenUtils { private static final String SECRET_KEY = "your_secret_key"; private static final long EXPIRATION_TIME = 86400000L; // token 过期时间为 24 小时 public static String generateToken(User user) { Date now = new Date(); Date expiration = new Date(now.getTime() + EXPIRATION_TIME); return Jwts.builder() .setSubject(user.getUsername()) .claim("userId", user.getId()) .setIssuedAt(now) .setExpiration(expiration) .signWith(SignatureAlgorithm.HS256, SECRET_KEY) .compact(); } public static User parseToken(String token) { Claims claims = Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token) .getBody(); return new User( Long.parseLong(claims.get("userId").toString()), claims.getSubject() ); } } ``` 其中,`generateToken()` 方法用于生成 JWT,`parseToken()` 方法用于解析 JWT。`SECRET_KEY` 是一个字符串,用于签名 JWT,应该保密存储。`EXPIRATION_TIME` 表示 token 的过期时间,这里设置为 24 小时。 3. 创建一个 AuthInterceptor 拦截器,用于拦截需要进行 Token 校验请求: ```java public class AuthInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String token = request.getHeader("Authorization"); if (token != null && token.startsWith("Bearer ")) { token = token.substring(7); try { User user = TokenUtils.parseToken(token); request.setAttribute("currentUser", user); return true; } catch (Exception e) { response.setStatus(HttpStatus.UNAUTHORIZED.value()); return false; } } else { response.setStatus(HttpStatus.UNAUTHORIZED.value()); return false; } } } ``` 其中,`preHandle()` 方法会在请求到达控制器之前被调用,如果请求头中包含有效的 JWT,则将其解析出来,并将当前用户信息存储到 `HttpServletRequest` 对象中,然后返回 `true`;否则,返回 `false`,并设置响应状态码为 401(未授权)。 4. 在 Spring Boot 的配置类中注册 AuthInterceptor 拦截器: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new AuthInterceptor()) .addPathPatterns("/api/**") .excludePathPatterns("/api/user/login"); // 登录接口不需要进行 token 校验 } } ``` 其中,`.addPathPatterns("/api/**")` 表示对 `/api` 目录下的所有请求进行拦截,`.excludePathPatterns("/api/user/login")` 表示对 `/api/user/login` 接口不进行拦截。 5. 在控制器中使用 `@CurrentUser` 注解获取当前用户信息: ```java @RestController @RequestMapping("/api/user") public class UserController { @Autowired private UserService userService; @PostMapping("/login") public Result login(@RequestBody LoginRequest request) { User user = userService.login(request.getUsername(), request.getPassword()); String token = TokenUtils.generateToken(user); return Result.success(token); } @GetMapping("/info") public Result getUserInfo(@CurrentUser User user) { return Result.success(user); } } ``` 其中,`@CurrentUser` 注解用于从 `HttpServletRequest` 对象中获取当前用户信息,代码如下: ```java @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface CurrentUser { } ``` ```java @ControllerAdvice public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.getParameterType().equals(User.class) && parameter.hasParameterAnnotation(CurrentUser.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { return webRequest.getAttribute("currentUser", RequestAttributes.SCOPE_REQUEST); } } ``` 需要在 Spring Boot 的配置类中注册 `CurrentUserMethodArgumentResolver` 类: ```java @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { resolvers.add(new CurrentUserMethodArgumentResolver()); } } ``` 至此,一个简单的使用 Spring Boot 和 MyBatis Plus 实现 Token 校验的示例就完成了。当客户端发送请求时,需要在请求头中添加 `Authorization` 字段,值为 `Bearer <token>`,其中 `<token>` 为生成的 JWT。如果 token 校验成功,控制器中的 `@CurrentUser` 参数会自动填充当前用户信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值