boot spring 加入head_springboot的过滤器一次请求执行了两次,且在第一次获取的某header为空的情况下第二..._慕课猿问...

在Spring Boot应用中,一个登录过滤器LoginFilter出现了每次请求都会执行两次的情况。首次执行时从header中获取的tempUid为空,而第二次执行时能够获取到tempUid的值。问题可能与过滤器配置或请求处理流程有关。
摘要由CSDN通过智能技术生成

1.如题,一次过来的请求在loginfilter里执行了两次,第一次获取header为空,然后又进入了一次loginfilter,却可以获得header的一个参数

2.filter类

public class LoginFilter implements Filter {

@Autowired

UserService userService;

@Value("errorPage")

String errorPage = "/auth/error.htm";

//Logger logger = LoggerFactory.getLogger(this.getClass());

@Override

public void init(FilterConfig filterConfig) throws ServletException {

ServletContext servletContext = filterConfig.getServletContext();

ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);

userService = (UserService)ctx.getBean("userService");

}

@Override

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)

throws IOException, ServletException {

String path = ((HttpServletRequest)servletRequest).getServletPath();

String tempUid = ((HttpServletRequest)servletRequest).getHeader("tempUid");

//System.out.println(JSON.toJSONString(req.getHeaderNames()));

//logger.info("path=" + path + " and tempUid = " + tempUid);

if (path.indexOf("/auth/configValue") >= 0 ||

path.indexOf("/user/code") >= 0) {

// Filter 只是链式处理,请求依然转发到目的地址。

filterChain.doFilter(servletRequest, servletResponse);

} else if (StringUtils.hasLength(tempUid)){

userService.checkAuth(tempUid);

// Filter 只是链式处理,请求依然转发到目的地址。

filterChain.doFilter(servletRequest, servletResponse);

} else if (path.indexOf(errorPage) >= 0){

// Filter 只是链式处理,请求依然转发到目的地址。

filterChain.doFilter(servletRequest, servletResponse);

} else {

//logger.error("除获取前端签名和用户信息,所有接口都必须带tempUid!");

//return;

servletRequest.getRequestDispatcher(errorPage).forward(servletRequest, servletResponse);

}

}

@Override

public void destroy() {

}

}

//filter配置

@Configuration

public class FilterConfig {

@Bean

public FilterRegistrationBean filterRegistration() {

FilterRegistrationBean registration = new FilterRegistrationBean();

registration.setFilter(new LoginFilter());

registration.addUrlPatterns("/*");

registration.setName("loginFilter");

registration.setOrder(1);

return registration;

}

}

3.请求进来的时候第一次获取tempUid为null,第二次有值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值