Browse Source

后端整合模块

detached
huangqizhen 5 months ago
parent
commit
52e704a605
  1. 2
      src/main/java/com/example/demo/mapper/UserMapper.java
  2. 106
      src/main/java/com/example/demo/security/TokenFilter.java

2
src/main/java/com/example/demo/mapper/UserMapper.java

@ -11,7 +11,7 @@ import java.util.List;
@Mapper
public interface UserMapper {
@Select({
"select jwcode from user"
"select jwcode from user where jwcode=#{jwcode}"
})
List<String> selectJwcode();
@Select({

106
src/main/java/com/example/demo/security/TokenFilter.java

@ -158,6 +158,7 @@ public class TokenFilter extends OncePerRequestFilter {
} else {
// 使用RequestWrapper包装原始的HttpServletRequest使其输入流可以被重复读取
RequestWrapper requestWrapper = new RequestWrapper(request);
System.out.println(request);
// 确保请求体只被读取一次
boolean hasRequestBody = "POST".equals(requestWrapper.getMethod());
if (hasRequestBody) {
@ -192,3 +193,108 @@ public class TokenFilter extends OncePerRequestFilter {
}
}
}
//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.core.JsonProcessingException;
//import com.fasterxml.jackson.core.type.TypeReference;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import jakarta.servlet.FilterChain;
//import jakarta.servlet.ServletException;
//import jakarta.servlet.http.HttpServletRequest;
//import jakarta.servlet.http.HttpServletResponse;
//import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
//import org.springframework.security.core.context.SecurityContextHolder;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
//import org.springframework.stereotype.Component;
//import org.springframework.util.ObjectUtils;
//import org.springframework.util.StringUtils;
//import org.springframework.web.filter.OncePerRequestFilter;
//
//import java.io.IOException;
//import java.io.InputStream;
//import java.util.List;
//
//@Component
//public class TokenFilter extends OncePerRequestFilter {
//
// private final ObjectMapper objectMapper = new ObjectMapper();
//
// @Override
// protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
// throws ServletException, IOException {
// // 检查是否是上传请求
// boolean isUploadRequest = request.getRequestURI().startsWith("/upload");
// System.out.println(request.getRequestURI());
// System.out.println(isUploadRequest);
// if (isUploadRequest) {
// // 如果是上传请求直接将请求传递给下一个过滤器或目标资源
// filterChain.doFilter(request, response);
// return;
// } else {
// // 使用RequestWrapper包装原始的HttpServletRequest使其输入流可以被重复读取
// RequestWrapper requestWrapper = new RequestWrapper(request);
// System.out.println(request);
// // 确保请求体只被读取一次
// boolean hasRequestBody = "POST".equals(requestWrapper.getMethod());
// if (hasRequestBody) {
// // 获取输入流
// InputStream inputStream = requestWrapper.getInputStream();
//
// // 检查Content-Type是否为application/json并且请求体不为空
// String contentType = request.getContentType();
// if (contentType != null && contentType.startsWith("application/json") && inputStream.available() > 0) {
// // 尝试反序列化JSON
// try {
// // 尝试将输入流转换为字符串以检查是否为数组
// String json = objectMapper.readTree(inputStream).toString();
// if (json.startsWith("[")) {
// // JSON是数组
// TypeReference<List<TokenPayload>> typeRef = new TypeReference<List<TokenPayload>>() {};
// List<TokenPayload> tokenPayloads = objectMapper.readValue(json, typeRef);
// // 处理tokenPayloads列表
// for (TokenPayload tokenPayload : tokenPayloads) {
// processTokenPayload(tokenPayload, requestWrapper);
// }
// } else {
// // JSON是单个对象
// TokenPayload tokenPayload = objectMapper.readValue(json, TokenPayload.class);
// processTokenPayload(tokenPayload, requestWrapper);
// }
// } catch (JsonProcessingException e) {
// e.printStackTrace();
// // JSON解析失败可以在这里添加相应的处理逻辑例如返回400状态码等
// }
// }
// }
// // 非上传请求继续执行过滤器链
// filterChain.doFilter(requestWrapper, response);
// }
// }
//
// private void processTokenPayload(TokenPayload tokenPayload, HttpServletRequest request) {
// // 检查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状态码等
// }
// }
// }
//}
Loading…
Cancel
Save