Commit 47c747e0 authored by huangcb's avatar huangcb

增加AuthFilter过滤器

parent 00717d86
......@@ -144,7 +144,7 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>false</skipTests>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
......@@ -153,6 +153,15 @@
<profile>
<id>release</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
......@@ -170,6 +179,7 @@
</profiles>
<build>
<finalName>freight-app-service</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
......@@ -192,17 +202,6 @@
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<excludes>
</excludes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
......@@ -6,6 +6,9 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.context.request.RequestContextListener;
import javax.annotation.PostConstruct;
import java.util.TimeZone;
/**
* @description: 启动类
* @project: Spring-Cloud-Single-Template
......@@ -27,4 +30,9 @@ public class AppApplication {
public RequestContextListener 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 {
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 获取来自上游服务的传参traceId
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);
try {
filterChain.doFilter(servletRequest, servletResponse);
......
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.RestResponseWrapper;
import lombok.extern.slf4j.Slf4j;
......@@ -40,12 +41,11 @@ public class RestLogFilter implements Filter {
RestResponseWrapper responseWrapper = new RestResponseWrapper((HttpServletResponse) servletResponse);
String reqContentType = StringUtils.trimToEmpty(requestWrapper.getContentType()).toLowerCase();
if (reqContentType.contains("multipart/form-data")) {
log.info("multipart/form-data request");
} else {
if (!reqContentType.contains("multipart/form-data")) {
// 日志输出请求
logReq(requestWrapper);
}
logReqHeader(requestWrapper);
filterChain.doFilter(requestWrapper, responseWrapper);
......@@ -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 {
byte[] bytes = responseWrapper.getBody();
String resStr = new String(bytes,"utf-8");
......
......@@ -123,18 +123,34 @@ public class EResponse<T> implements Serializable {
}
public int getCode() {
return this.code;
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public long getTime() {
public void setMessage(String message) {
this.message = message;
}
public long getResponseTime() {
return responseTime;
}
public void setResponseTime(long responseTime) {
this.responseTime = responseTime;
}
public T getData() {
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;
import com.esv.freight.app.common.filter.AuthFilter;
import com.esv.freight.app.common.filter.LogbackFilter;
import com.esv.freight.app.common.filter.RestLogFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
......@@ -37,4 +38,18 @@ public class LogFilterConfig {
filterRegistrationBean.setOrder(Integer.MIN_VALUE + 1);
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