springboot springcloud zuul 过滤器
1.继承类:ZuulFilter
2.丢失请求头:Authorization
3.转发请求头:Authorization
4.使用场景:验证权限
1.继承类:ZuulFilter
package com.ligy.school.zuul.filter; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.exception.ZuulException; import org.springframework.stereotype.Component; @Component public class AuthFilter extends ZuulFilter { public String filterType() { //pre 请求前面 post请求后面 error发生错误时 //route 在路由请求时被调用 return "pre"; } public int filterOrder() { //执行顺序 0 1 2 最先执行的是0,小的先执行 return 0; } public boolean shouldFilter() { //开关:true 打开 false:关闭 return true; } public Object run() throws ZuulException { //返回Object 就等于放行 System.out.println("过滤器,执行了"); return null; } }
2.丢失请求头:Authorization
3.转发请求头:Authorization
public Object run() throws ZuulException { //返回Object 就等于放行 System.out.println("过滤器,执行了"); RequestContext context = RequestContext.getCurrentContext(); HttpServletRequest request = context.getRequest(); String authorization = request.getHeader("Authorization"); System.out.println("zuul:authorization:" + authorization); if (authorization != null && !"".equals(authorization)) { //转发头 context.addZuulRequestHeader("authorization", authorization); System.out.println("zuul:转发头:authorization:" + authorization); return "ok"; } context.setResponseStatusCode(401); context.setResponseBody("权限校验失败"); context.setSendZuulResponse(false);//禁止通行 context.getResponse().setContentType("text/html;charset=utf-8"); return null; }
问题:转发后, 依然拿 不到头。
解决方法:
#配置不过滤所有头
zuul.sensitive-headers=""
4.使用场景:验证权限
public Object run() throws ZuulException { //返回Object 就等于放行 System.out.println("过滤器,执行了"); RequestContext context = RequestContext.getCurrentContext(); HttpServletRequest request = context.getRequest(); String authorization = request.getHeader("Authorization"); System.out.println("zuul:authorization:" + authorization); if (authorization != null && !"".equals(authorization)) { //转发头 context.addZuulRequestHeader("authorization", authorization); System.out.println("zuul:转发头:authorization:" + authorization); return "ok"; } context.setResponseStatusCode(401); context.setResponseBody("权限校验失败"); context.setSendZuulResponse(false);//禁止通行 context.getResponse().setContentType("text/html;charset=utf-8"); return null; }