版权声明:本文为wcuu原创文章。 https://blog.csdn.net/wcuuchina/article/details/86352988
总的过滤器,设置过滤器顺序
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
/**
* @author wangwei
* @version v1.0.0
* @description 总过滤器
* @date 2019-10-12
*/
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean buildBFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setOrder(2);
filterRegistrationBean.setFilter(new SignFilter());
filterRegistrationBean.setName("SignFilter");
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
@Bean
public FilterRegistrationBean buildCFilter() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setOrder(3);
filterRegistrationBean.setFilter(new LoginValidateFilter());
filterRegistrationBean.setName("LoginValidateFilter");
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
}
分过滤器
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;
/**
* @author wangwei
* @version v1.0.0
* @description 签名过滤器, 签名不拦截open下的接口
* @date 2019-01-12
*/
@Component
@WebFilter(filterName="SignFilter", urlPatterns="/*")
@RefreshScope
public class SignFilter implements Filter {
@Value("${version}")
private String version;
@Override
public void init(javax.servlet.FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String path = request.getRequestURI();
if(path.indexOf("/api/open/")> -1 ){
filterChain.doFilter(servletRequest, servletResponse);
return;
}
Map<String, String> map = SignUtil.toVerifyMap(request.getParameterMap(),false);
String secretKey = map.get("secretKey");
if (StringUtils.isEmpty(secretKey) || !map.get("secretKey").equals(SignUtil.getInstance().secretkey)){
System.out.println("secretKey is err");
PrintWriter writer = null;
servletResponse.setCharacterEncoding("UTF-8");
servletResponse.setContentType("text/html; charset=utf-8");
try {
writer = servletResponse.getWriter();
String userJson = "{\"code\":\" "+ ErrorCode.CODE_431.getCode() +"\", \"message\": \""+ ErrorCode.CODE_431.getMessage() +"\"}";
writer.print(userJson);
} catch (IOException e1) {
} finally {
if (writer != null)
writer.close();
}
}
if (SignUtil.getInstance().verify(map)){
// 签名成功
filterChain.doFilter(servletRequest, servletResponse);
return;
}else {
PrintWriter writer = null;
servletResponse.setCharacterEncoding("UTF-8");
servletResponse.setContentType("text/html; charset=utf-8");
try {
writer = servletResponse.getWriter();
String userJson = "{\"code\":\" "+ ErrorCode.CODE_430.getCode() +"\", \"message\": \""+ ErrorCode.CODE_430.getMessage() +"\"}";
writer.print(userJson);
} catch (IOException e1) {
} finally {
if (writer != null)
writer.close();
}
}
}
@Override
public void destroy() {
}
}
分过滤器2
import com.alibaba.druid.support.json.JSONUtils;
import io.jsonwebtoken.Claims;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
/**
* @author wangwei
* @version v1.0.0
* @description 登录验证过滤器Filter
* @date 2019-01-10
*/
@Component
@WebFilter(filterName="LoginValidateFilter", urlPatterns="/*")
@RefreshScope
public class LoginValidateFilter implements Filter {
@Value("${version}")
private String version;
@Override
public void init(javax.servlet.FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
String token = ((HttpServletResponse) servletResponse).getHeader("token");
if(StringUtils.isBlank(token)) {
token = servletRequest.getParameter("token");
}
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
String path = request.getRequestURI();
if(path.indexOf("/api/open/")> -1 ){
filterChain.doFilter(servletRequest, servletResponse);
return;
}
if(StringUtils.isNotBlank(token)) {
// 判断是否过期 没有过期在header更新token
try{
Claims claims = JWTUtils.parseJWT(token);
((HttpServletResponse) servletResponse).setHeader("token", JWTUtils.createJWT(claims.getId(), claims.getIssuer(), claims.getSubject(), 1000 * 60 * 30));
filterChain.doFilter(servletRequest, servletResponse);
} catch (Exception e) {
PrintWriter writer = null;
servletResponse.setCharacterEncoding("UTF-8");
servletResponse.setContentType("text/html; charset=utf-8");
try {
writer = servletResponse.getWriter();
String userJson = "{\"code\":\" "+ ErrorCode.UNLOGIN_ERROR.getCode() +"\", \"message\": \""+ ErrorCode.UNLOGIN_ERROR.getMessage() +"\"}";
writer.print(userJson);
} catch (IOException e1) {
} finally {
if (writer != null)
writer.close();
}
}
} else {
PrintWriter writer = null;
servletResponse.setCharacterEncoding("UTF-8");
servletResponse.setContentType("text/html; charset=utf-8");
try {
writer = servletResponse.getWriter();
String userJson = "{\"code\":\" "+ ErrorCode.PARAMETER_CHECK_ERROR.getCode() +"\", \"message\": \""+ ErrorCode.PARAMETER_CHECK_ERROR.getMessage() +"\"}";
writer.print(userJson);
} catch (IOException e1) {
} finally {
if (writer != null)
writer.close();
}
}
}
@Override
public void destroy() {
}
}