springboot使用filter获取自定义请求头的实现代码

网友投稿 363 2023-01-06


springboot使用filter获取自定义请求头的实现代码

有个钱包项目,本来用的是微服务这一套,后来感觉没必要,重构成了简单的springboot项目,但是token校验重构完之后出问题了,之前写filter走的是springgateway,基于GatewayFilter实现,重构了之后基于filter,然后当请求进入过滤器的时候,发现不能获取到请求的自定义请求头。

String token = request.getHeader("token"); // null

String id = request.getHeader("id"); // null

Shttp://tring role = request.getHeader("role"); // null

原因

我在进入断点的时候查看了一下servletRequest,发现请求方法是options。 我知道get post delete put。还真不了解options,百度了下。主要参考这篇文章。原来是浏览器的同源策略问题,也就是cors,可我一想,我配置了cors啊

@Configuration

public class CorsConfig {

private CorsConfiguration buildConfig() {

CorsConfiguration corsConfiguration = new CorsConfiguration();

corsConfiguration.addAllowedOrigin("*"); // 1

corsConfiguration.addAllowedHeader("*"); // 2

corsConfiguration.addAllowedMethod("*"); // 3

return corsConfiguration;

}

@Bean

public CorsFilter corsFilter() {

UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();

source.registerCorsConfiguration("/**", buildConfig()); // 4

return new CorsFilter(source);

}

}

怎么还报跨域的问题呢,想起来了我的tokenFilter里因为拿不到请求头token,我抛出了参数异常,然后@RestControllerAdvice跟@ExceptionHandle处理不了filter中抛出的异常,导致程序报500错误,然后过滤器是类似于切面的 么,这里断了导致返回头也没加上。

处理

怎么处理浏览器发过来的预处理 options请求呢,太懒了,直接这样写了

HttpServletRequest request= (HttpServletRequest)servletRequest;

HttpServletResponse res = (HttpServletResponse) servletResponse;

String method=request.getMethod();

if(HttpMethod.OPTIONS.toString().equals(method)){

res.setStatus(HttpStatus.NO_CONTENT.value());

}else {

String token = request.getHeader("token");

String id = request.getHeader("id");

String role = request.getHeader("role");

~~~~~~~

回想

我记得我上个项目也没处理options请求啊,怎么没报cors问题啊,对了我记得我在nginx处理过了

if ($request_method = 'OPTIONS') {

return 204;

}

add_header Access-Control-Allow-Origin * always;

add_header Access-Control-Allow-Headers "Content-Type, Authorization" always;

add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, PATCH, DELETE, HEAD" always;

add_header Access-Control-Max-Age 86400 always;

原来自己又写前端,也写后端,怎么这些问题还能碰到呢,:relieved:,前辈们都写好了,自己还没遇到问题也没深入过,还有springcloud里面的corsWebFilter怎么就跟springboot里面的corsFilter不一样呢。

@Configuration

public class CorsConfig {

@Bean

public CorsWebFilter corsFilter() {

CorsConfiguration config = new CorsConfiguration();

config.addAllowedMethod("*");

config.addAllowedOrigin("*");

config.addAllowedHeader("*");

UrlBasedCorsConfigurationSource http://source = new UrlBasedCorsConfigurationSource(new PathPatternParser());

source.registerCorsConfiguration("/**", config);

return new CorsWebFilter(source);

}

}

还是得多看源码啊,我这个crudboy

总结

以上所述是给大家介绍的springboot使用filter获取自定义请求头的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,会及时回复大家的。在此也非常感谢大家对我们网站的支持!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:做过什么接口测试(接口测试主要做什么)
下一篇:java 获取request中的请求参数代码详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~