Commit 47c747e0 authored by huangcb's avatar huangcb

增加AuthFilter过滤器

parent 00717d86
...@@ -144,7 +144,7 @@ ...@@ -144,7 +144,7 @@
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> <artifactId>maven-surefire-plugin</artifactId>
<configuration> <configuration>
<skipTests>false</skipTests> <skipTests>true</skipTests>
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
...@@ -153,6 +153,15 @@ ...@@ -153,6 +153,15 @@
<profile> <profile>
<id>release</id> <id>release</id>
<build> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
<resources> <resources>
<resource> <resource>
<directory>src/main/resources</directory> <directory>src/main/resources</directory>
...@@ -170,6 +179,7 @@ ...@@ -170,6 +179,7 @@
</profiles> </profiles>
<build> <build>
<finalName>freight-app-service</finalName>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
...@@ -192,17 +202,6 @@ ...@@ -192,17 +202,6 @@
</configuration> </configuration>
</plugin> </plugin>
</plugins> </plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<excludes>
</excludes>
<filtering>true</filtering>
</resource>
</resources>
</build> </build>
</project> </project>
...@@ -6,6 +6,9 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient; ...@@ -6,6 +6,9 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.web.context.request.RequestContextListener; import org.springframework.web.context.request.RequestContextListener;
import javax.annotation.PostConstruct;
import java.util.TimeZone;
/** /**
* @description: 启动类 * @description: 启动类
* @project: Spring-Cloud-Single-Template * @project: Spring-Cloud-Single-Template
...@@ -27,4 +30,9 @@ public class AppApplication { ...@@ -27,4 +30,9 @@ public class AppApplication {
public RequestContextListener requestContextListener(){ public RequestContextListener requestContextListener(){
return new RequestContextListener(); return new RequestContextListener();
} }
@PostConstruct
void setDefaultTimezone() {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
}
} }
package com.esv.freight.app.common.filter;
import com.esv.freight.app.common.response.ECode;
import com.esv.freight.app.common.response.EResponse;
import com.esv.freight.app.common.util.AESSecretUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
/**
* @description: 权限过滤器
* @project: app-service
* @name: com.esv.freight.app.common.filter.AuthFilter
* @author: 黄朝斌
* @email: huangchaobin@esvtek.com
* @createTime: 2020/04/23 15:02
* @version:1.0
*/
@Slf4j
@RefreshScope
public class AuthFilter implements Filter {
@Value("${aes.sha1prng.key:freight-app-service-001}")
private String AES_KEY;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
/************************ Token加解密示例 ************************/
log.info(AES_KEY);
String tokenTest = "1,13912345678,sn001," + System.currentTimeMillis();
String accessTokenTest = AESSecretUtils.encryptToStr(tokenTest, AES_KEY);
log.info(tokenTest);
log.info(accessTokenTest);
log.info(AESSecretUtils.decryptToStr(accessTokenTest, AES_KEY));
/************************ Token加解密示例 ************************/
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String accessToken = request.getHeader("Union-Authorization");
if (StringUtils.isBlank(accessToken)) {
this.errorResponse(EResponse.error(ECode.TOKEN_INVALID), response);
return;
} else {
// 解析并校验Token
}
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
private void errorResponse(EResponse eResponse, HttpServletResponse response) {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
OutputStreamWriter osw = null;
PrintWriter writer = null;
try {
osw = new OutputStreamWriter(response.getOutputStream(), "UTF-8");
writer = new PrintWriter(osw, true);
writer.write(eResponse.toString());
writer.flush();
osw.close();
} catch (IOException e) {
log.error(e.getMessage(), e);
} finally {
if (null != writer) {
writer.close();
}
if (null != osw) {
try {
osw.close();
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}
}
}
...@@ -30,7 +30,10 @@ public class LogbackFilter implements Filter { ...@@ -30,7 +30,10 @@ public class LogbackFilter implements Filter {
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 获取来自上游服务的传参traceId // 获取来自上游服务的传参traceId
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
String traceId = httpServletRequest.getHeader("trace_id"); String traceId = httpServletRequest.getHeader("gateway_traceid");
if (StringUtils.isBlank(traceId)) {
traceId = httpServletRequest.getHeader("trace_id");
}
boolean bInsertMDC = setMDC(traceId); boolean bInsertMDC = setMDC(traceId);
try { try {
filterChain.doFilter(servletRequest, servletResponse); filterChain.doFilter(servletRequest, servletResponse);
......
package com.esv.freight.app.common.filter; package com.esv.freight.app.common.filter;
import com.alibaba.fastjson.JSONObject;
import com.esv.freight.app.common.wrapper.RestRequestWrapper; import com.esv.freight.app.common.wrapper.RestRequestWrapper;
import com.esv.freight.app.common.wrapper.RestResponseWrapper; import com.esv.freight.app.common.wrapper.RestResponseWrapper;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -40,12 +41,11 @@ public class RestLogFilter implements Filter { ...@@ -40,12 +41,11 @@ public class RestLogFilter implements Filter {
RestResponseWrapper responseWrapper = new RestResponseWrapper((HttpServletResponse) servletResponse); RestResponseWrapper responseWrapper = new RestResponseWrapper((HttpServletResponse) servletResponse);
String reqContentType = StringUtils.trimToEmpty(requestWrapper.getContentType()).toLowerCase(); String reqContentType = StringUtils.trimToEmpty(requestWrapper.getContentType()).toLowerCase();
if (reqContentType.contains("multipart/form-data")) { if (!reqContentType.contains("multipart/form-data")) {
log.info("multipart/form-data request");
} else {
// 日志输出请求 // 日志输出请求
logReq(requestWrapper); logReq(requestWrapper);
} }
logReqHeader(requestWrapper);
filterChain.doFilter(requestWrapper, responseWrapper); filterChain.doFilter(requestWrapper, responseWrapper);
...@@ -138,6 +138,16 @@ public class RestLogFilter implements Filter { ...@@ -138,6 +138,16 @@ public class RestLogFilter implements Filter {
} }
} }
private void logReqHeader(RestRequestWrapper request) {
JSONObject headerJson = new JSONObject();
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
headerJson.put(key, request.getHeader(key));
}
log.info("请求头:{}", headerJson.toJSONString());
}
private void logRes(RestRequestWrapper requestWrapper, RestResponseWrapper responseWrapper) throws Exception { private void logRes(RestRequestWrapper requestWrapper, RestResponseWrapper responseWrapper) throws Exception {
byte[] bytes = responseWrapper.getBody(); byte[] bytes = responseWrapper.getBody();
String resStr = new String(bytes,"utf-8"); String resStr = new String(bytes,"utf-8");
......
...@@ -123,18 +123,34 @@ public class EResponse<T> implements Serializable { ...@@ -123,18 +123,34 @@ public class EResponse<T> implements Serializable {
} }
public int getCode() { public int getCode() {
return this.code; return code;
}
public void setCode(int code) {
this.code = code;
} }
public String getMessage() { public String getMessage() {
return message; return message;
} }
public long getTime() { public void setMessage(String message) {
this.message = message;
}
public long getResponseTime() {
return responseTime; return responseTime;
} }
public void setResponseTime(long responseTime) {
this.responseTime = responseTime;
}
public T getData() { public T getData() {
return data; return data;
} }
public void setData(T data) {
this.data = data;
}
} }
\ No newline at end of file
package com.esv.freight.app.config;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
/**
* @description: 注册Feign请求拦截器
* @project: Spring-Cloud-Single-Template
* @name: com.esv.freight.config.FeignInterceptorConfig
* @author: 黄朝斌
* @email: huangchaobin@esvtek.com
* @createTime: 2020/04/09 9:58
* @version:1.0
*/
public class FeignInterceptorConfig {
@Value("${spring.application.name}")
private String applicationName;
@Bean
public RequestInterceptor requestInterceptor(){
return new FeignRequestInterceptor();
}
class FeignRequestInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header("trace_id", MDC.get("traceId"));
requestTemplate.header("application_name", applicationName);
}
}
}
package com.esv.freight.app.config; package com.esv.freight.app.config;
import com.esv.freight.app.common.filter.AuthFilter;
import com.esv.freight.app.common.filter.LogbackFilter; import com.esv.freight.app.common.filter.LogbackFilter;
import com.esv.freight.app.common.filter.RestLogFilter; import com.esv.freight.app.common.filter.RestLogFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
...@@ -37,4 +38,18 @@ public class LogFilterConfig { ...@@ -37,4 +38,18 @@ public class LogFilterConfig {
filterRegistrationBean.setOrder(Integer.MIN_VALUE + 1); filterRegistrationBean.setOrder(Integer.MIN_VALUE + 1);
return filterRegistrationBean; return filterRegistrationBean;
} }
@Bean
public AuthFilter getAuthFilter() {
return new AuthFilter();
}
@Bean
public FilterRegistrationBean<AuthFilter> authFilterRegister() {
FilterRegistrationBean<AuthFilter> filterRegistrationBean=new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(getAuthFilter());
filterRegistrationBean.addUrlPatterns(URL);
filterRegistrationBean.setOrder(Integer.MIN_VALUE + 2);
return filterRegistrationBean;
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment