springcloud<zuul过滤器简单配置与跨域设置>
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);
}
}
本文来自博客园,作者:余生请多指教ANT,转载请注明原文链接:https://www.cnblogs.com/wangbiaohistory/p/14644825.html

浙公网安备 33010602011771号