package com.wangbiao.config; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.FORWARD_TO_KEY; import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.SERVICE_ID_KEY; /** * TODO * * @author wangbiao * @Title TODO * @module TODO * @description 过滤器 * @date 2021/4/10 22:21 */ @Slf4j @Component public class TokenFilter extends ZuulFilter { @Override public String filterType() { return FilterConstants.PRE_TYPE;//pre:路由之前;routing:路由之时;post: 路由之后;error:发送错误调用 } @Override public int filterOrder() { return FilterConstants.PRE_DECORATION_FILTER_ORDER - 1; // return 0;// 优先级0,数字越大,优先级越低 } @Override public boolean shouldFilter() { // RequestContext ctx = RequestContext.getCurrentContext(); // return !ctx.containsKey(FORWARD_TO_KEY) // 判断filter是否被转发 // && !ctx.containsKey(SERVICE_ID_KEY); // 判断filter是否定义了serviceId return true;// 是否执行该过滤器,此处为true为过滤 } // shouldFilter() 为true 此方法执行 @Override public Object run() throws ZuulException { RequestContext ctx = RequestContext.getCurrentContext(); ctx.getResponse().setCharacterEncoding("gbk"); HttpServletRequest request = ctx.getRequest(); log.info(String.format("%s -----------> %s", request.getMethod(), request.getRequestURL().toString())); Object accessToken = request.getParameter("token");// 获取请求的参数 if(accessToken == null) { ctx.setSendZuulResponse(false);// 是否允许该请求对下游进行路由 ctx.setResponseStatusCode(401);// 返回错误码 ctx.setResponseBody("{"status":401,"message":"token为空!"}");//返回错误内容 //或者也可以后端打印下try {ctx.getResponse().getWriter().write("token is null");}catch (Exception e){} //filter-is-success保存于上下文,作为同类型下游Filter的执行开关 ctx.set("filter-is-success", false); return null; } // ctx.addZuulRequestHeader("phone", phone); // ctx.addZuulRequestHeader("customerId", customerId); ctx.set("filter-is-success", true); return null; } }
package com.wangbiao.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* TODO
*
* @author wangbiao
* @Title TODO
* @module TODO
* @description 跨域请求
* @date 2021/4/11 12:05
*/
@Configuration
public class DiyCorsConfiguration {
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
final CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);//允许cookies跨域
config.setMaxAge(18000L);// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
config.setMaxAge(3600L);
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}