diff --git a/src/main/java/com/example/demo/controller/AdminController.java b/src/main/java/com/example/demo/controller/AdminController.java index 82e7a62..b3f6e10 100644 --- a/src/main/java/com/example/demo/controller/AdminController.java +++ b/src/main/java/com/example/demo/controller/AdminController.java @@ -33,6 +33,9 @@ public class AdminController { @PostMapping("/login") public Result login(@RequestBody Admin admin){ + if(ObjectUtils.isEmpty(admin)){ + System.out.println("他是空"); + } try { System.out.println(admin+"*-*-*-*-*-*-*-*-*-*-1"); diff --git a/src/main/java/com/example/demo/security/TokenFilter.java b/src/main/java/com/example/demo/security/TokenFilter.java index f5c5dce..80fb1c5 100644 --- a/src/main/java/com/example/demo/security/TokenFilter.java +++ b/src/main/java/com/example/demo/security/TokenFilter.java @@ -25,8 +25,8 @@ // @Override // protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // // 取Token 生成登录信息 -//// String token = request.getHeader("token"); -// String token = new RequestWrapper(request).getBodyString(); +// String token = request.getHeader("token"); +// // // System.out.println(token+"123132132"); // @@ -55,6 +55,7 @@ package com.example.demo.security; import com.example.demo.Util.JWTUtil; +import com.example.demo.Util.RequestWrapper; import com.example.demo.Util.TokenPayload; import com.example.demo.domain.entity.Admin; import com.fasterxml.jackson.databind.ObjectMapper; @@ -77,37 +78,42 @@ import java.io.InputStream; public class TokenFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + // 使用RequestWrapper包装原始的HttpServletRequest,使其输入流可以被重复读取 + RequestWrapper requestWrapper = new RequestWrapper(request); + // 确保请求体只被读取一次 - boolean hasRequestBody = "POST".equals(request.getMethod()); + boolean hasRequestBody = "POST".equals(requestWrapper.getMethod()); + System.out.println(hasRequestBody); if (hasRequestBody) { // 获取输入流 - try (InputStream inputStream = request.getInputStream()) { - // 使用Jackson ObjectMapper解析JSON - ObjectMapper objectMapper = new ObjectMapper(); - TokenPayload tokenPayload = objectMapper.readValue(inputStream, TokenPayload.class); - - // 检查tokenPayload中是否存在token属性,并且这个属性不为空 - String token = tokenPayload.getToken(); - if (StringUtils.hasText(token)) { - try { - UserDetails userDetails = JWTUtil.getUserDetailsList(token, Admin.class); - if (!ObjectUtils.isEmpty(userDetails)) { - // 将这个用户注册到Security中 - UsernamePasswordAuthenticationToken authenticationToken - = new UsernamePasswordAuthenticationToken( - userDetails, null, - userDetails.getAuthorities()); - authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); - SecurityContextHolder.getContext().setAuthentication(authenticationToken); - } - } catch (Exception e) { - e.printStackTrace(); - // Token无效,可以在这里添加相应的处理逻辑,例如返回401状态码等 + InputStream inputStream = requestWrapper.getInputStream(); + // 使用Jackson ObjectMapper解析JSON + ObjectMapper objectMapper = new ObjectMapper(); + TokenPayload tokenPayload = objectMapper.readValue(inputStream, TokenPayload.class); + System.out.println(tokenPayload + "/*/*/*/*/*/*/*"); + // 检查tokenPayload中是否存在token属性,并且这个属性不为空 + String token = tokenPayload.getToken(); + System.out.println(token + "*-*-*-*-*-*-*"); + if (StringUtils.hasText(token)) { + try { + System.out.println(token + "*-*-*-*-*-*-*"); + UserDetails userDetails = JWTUtil.getUserDetailsList(token, Admin.class); + if (!ObjectUtils.isEmpty(userDetails)) { + // 将这个用户注册到Security中 + UsernamePasswordAuthenticationToken authenticationToken + = new UsernamePasswordAuthenticationToken( + userDetails, null, + userDetails.getAuthorities()); + authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(requestWrapper)); + SecurityContextHolder.getContext().setAuthentication(authenticationToken); } + } catch (Exception e) { + e.printStackTrace(); + // Token无效,可以在这里添加相应的处理逻辑,例如返回401状态码等 } } + System.out.println(token + "*-*-*-*-*-*"); } - // 过滤器放行 - filterChain.doFilter(request, response); + filterChain.doFilter(requestWrapper, response); // 注意这里使用requestWrapper } -} \ No newline at end of file +}