13 changed files with 275 additions and 44 deletions
-
2pom.xml
-
1src/main/java/com/example/demo/DemoApplication.java
-
5src/main/java/com/example/demo/Util/JWTUtil.java
-
27src/main/java/com/example/demo/Util/ReplaceStreamFilter.java
-
123src/main/java/com/example/demo/Util/RequestWrapper.java
-
18src/main/java/com/example/demo/Util/TokenPayload.java
-
6src/main/java/com/example/demo/controller/AdminController.java
-
2src/main/java/com/example/demo/domain/entity/Admin.java
-
10src/main/java/com/example/demo/mapper/AdminMapper.java
-
7src/main/java/com/example/demo/security/SecurityConfig.java
-
106src/main/java/com/example/demo/security/TokenFilter.java
-
8src/main/java/com/example/demo/serviceImpl/AdminServiceImpl.java
-
2src/main/java/com/example/demo/sevice/AdminService.java
@ -0,0 +1,27 @@ |
|||||
|
package com.example.demo.Util; |
||||
|
|
||||
|
import jakarta.servlet.*; |
||||
|
import jakarta.servlet.http.HttpServletRequest; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
|
||||
|
//替换HttpServletRequest |
||||
|
@Slf4j |
||||
|
public class ReplaceStreamFilter implements Filter { |
||||
|
@Override |
||||
|
public void init(FilterConfig filterConfig) throws ServletException { |
||||
|
log.info("StreamFilter初始化..."); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { |
||||
|
ServletRequest requestWrapper = new RequestWrapper((HttpServletRequest) request); |
||||
|
chain.doFilter(requestWrapper, response); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void destroy() { |
||||
|
log.info("StreamFilter销毁..."); |
||||
|
} |
||||
|
} |
@ -0,0 +1,123 @@ |
|||||
|
package com.example.demo.Util; |
||||
|
|
||||
|
import jakarta.servlet.ReadListener; |
||||
|
import jakarta.servlet.ServletInputStream; |
||||
|
import jakarta.servlet.ServletRequest; |
||||
|
import jakarta.servlet.http.HttpServletRequest; |
||||
|
import jakarta.servlet.http.HttpServletRequestWrapper; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
|
||||
|
|
||||
|
import java.io.*; |
||||
|
import java.nio.charset.Charset; |
||||
|
|
||||
|
|
||||
|
//包装HttpServletRequest,目的是让其输入流可重复读 |
||||
|
@Slf4j |
||||
|
public class RequestWrapper extends HttpServletRequestWrapper { |
||||
|
/** |
||||
|
* 存储body数据的容器 |
||||
|
*/ |
||||
|
private final byte[] body; |
||||
|
|
||||
|
public RequestWrapper(HttpServletRequest request) throws IOException { |
||||
|
super(request); |
||||
|
|
||||
|
// 将body数据存储起来 |
||||
|
String bodyStr = getBodyString(request); |
||||
|
body = bodyStr.getBytes(Charset.defaultCharset()); |
||||
|
System.out.println(new String(body, Charset.defaultCharset()) + "+**+*+*+*++*+*+*+"); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取请求Body |
||||
|
* |
||||
|
* @param request request |
||||
|
* @return String |
||||
|
*/ |
||||
|
public String getBodyString(final ServletRequest request) { |
||||
|
try { |
||||
|
return inputStream2String(request.getInputStream()); |
||||
|
} catch (IOException e) { |
||||
|
log.error("", e); |
||||
|
throw new RuntimeException(e); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取请求Body |
||||
|
* |
||||
|
* @return String |
||||
|
*/ |
||||
|
public String getBodyString() { |
||||
|
final InputStream inputStream = new ByteArrayInputStream(body); |
||||
|
|
||||
|
return inputStream2String(inputStream); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 将inputStream里的数据读取出来并转换成字符串 |
||||
|
* |
||||
|
* @param inputStream inputStream |
||||
|
* @return String |
||||
|
*/ |
||||
|
private String inputStream2String(InputStream inputStream) { |
||||
|
StringBuilder sb = new StringBuilder(); |
||||
|
BufferedReader reader = null; |
||||
|
|
||||
|
try { |
||||
|
reader = new BufferedReader(new InputStreamReader(inputStream, Charset.defaultCharset())); |
||||
|
String line; |
||||
|
while ((line = reader.readLine()) != null) { |
||||
|
sb.append(line); |
||||
|
} |
||||
|
} catch (IOException e) { |
||||
|
log.error("", e); |
||||
|
throw new RuntimeException(e); |
||||
|
} finally { |
||||
|
if (reader != null) { |
||||
|
try { |
||||
|
reader.close(); |
||||
|
} catch (IOException e) { |
||||
|
log.error("", e); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return sb.toString(); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public BufferedReader getReader() throws IOException { |
||||
|
return new BufferedReader(new InputStreamReader(getInputStream())); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public ServletInputStream getInputStream() throws IOException { |
||||
|
|
||||
|
final ByteArrayInputStream inputStream = new ByteArrayInputStream(body); |
||||
|
|
||||
|
return new ServletInputStream() { |
||||
|
@Override |
||||
|
public int read() throws IOException { |
||||
|
return inputStream.read(); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public boolean isFinished() { |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public boolean isReady() { |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void setReadListener(ReadListener readListener) { |
||||
|
} |
||||
|
}; |
||||
|
} |
||||
|
} |
@ -0,0 +1,18 @@ |
|||||
|
package com.example.demo.Util; |
||||
|
|
||||
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties; |
||||
|
import com.fasterxml.jackson.annotation.JsonProperty; |
||||
|
import lombok.Data; |
||||
|
import lombok.Getter; |
||||
|
import lombok.Setter; |
||||
|
|
||||
|
@Data |
||||
|
public class TokenPayload { |
||||
|
@Setter |
||||
|
@Getter |
||||
|
@JsonProperty("token") |
||||
|
private String token; |
||||
|
private String jwcode; |
||||
|
private String password; |
||||
|
} |
||||
|
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue