Browse Source

后端整合模块

detached
huangqizhen 5 months ago
parent
commit
5e7ce9e347
  1. 3
      src/main/java/com/example/demo/controller/AdminController.java
  2. 62
      src/main/java/com/example/demo/security/TokenFilter.java

3
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");

62
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
}
}
}
Loading…
Cancel
Save