在我的一个REST服务中,我使用Spring Security性来验证在头中传递的令牌。然而,spring无法找到“authorization”标头,尽管它在那里。当在测试中测试时,甚至在本地测试时,这都不是一个问题,但当我们部署到PROD时,我们就会遇到这个问题。
作为替代/变通方法,我删除了Spring Security性,而是尝试在实际endpoint中验证我的令牌,然后继续处理请求的其余部分,如下所示:
@PostMapping(value="/create",consumes="application/json; charset=utf-8")
@CrossOrigin
public ResponseEntity createAccount(@RequestBody MerchantAccount merchantAccount,@RequestHeader(name="Authorization") String token) {
log.info("Checking User Token");
if(!jwtUtil.isAuthorizedToken(token))
return ResponseEntity.status(401).build();
//some creating Account Logic
}
如果我再次做了上面的工作,它将在测试和本地工作,但不是在Prod。我会得到的错误将是“丢失授权头”。但它又一次出现了。(从邮递员到测试)。
Prod上的java版本:java版本“1.8.0_121”
本地java版本:java版本“1.8.0_221”
在测试中,我们使用HTTP和PROD它是HTTPS。POM文件中的Spring Security版本是5.2
@Bean
public CorsConfigurationSource corsConfigurationSource() {
final CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(ImmutableList.of("*"));//YOLO Allow all origins, we can change this once we go to prod
configuration.setAllowedMethods(ImmutableList.of("HEAD",
"GET", "POST", "PUT", "DELETE", "PATCH","OPTIONS"));//Allowed Methods
configuration.setAllowCredentials(true);
configuration.setAllowedHeaders(ImmutableList.of("Authorization", "Cache-Control", "Content-Type","Access-Control-Request-Headers","Access-Control-Request-Method",
"Accept","Access-Control-Allow-Headers"));//Allowed Headers
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}
@Component
@Service
public class JwtRequestFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
logger.info("Done Getting Headers");
Collections.list(request.getHeaderNames()).forEach(item -> logger.info("header name is " + item));
logger.info("Done Getting Headers");
boolean isAccessToken = true;
final String requestTokenHeader = request.getHeader("authorization");//This is null as the Authorization header is not found in request
}
在游荡的星系之后...
我用这个修复了它:
@Configuration
@EnableWebSecurity
public class Config extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors().and() /*.other stuff */;
}
}
基本上,您需要使用http
对象启用cors()
。然后有多种方法来处理每个控制器/方法的CRO原点或全局的CRO原点。
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry
.addMapping("/greeting-javaconfig")
.allowedOrigins("http://localhost:8080");
}
};
}
@CrossOrigin(origins = "http://localhost:8080")
@GetMapping("/greeting")
public String greeting() {
return "works!";
}
参考:
所以回答,Spring官方指南
我正在处理一个在平均堆栈上运行的Web应用程序(遵循TraversyMedia教程)。然而,我遇到了一个问题,这里提供的任何解决方案似乎都不适合我。每当我尝试访问我的/个人资料页面(除非您获得授权,否则该页面将受到保护)时,我都会收到返回的错误。但是,我已登录并拥有正确的访问令牌。 我已经看了护照jwt git。但是我所拥有的似乎是匹配的。我尝试过使用: 目前正在使用:ExtractJwt。fro
提前感谢你花时间帮助我。 我试着把它放入application.properties 我制作了以下文件 文件夹结构 玩家 普拉耶尔道 FakePlayerDataAccessService 播放控制器 聚甲醛
我正试图将位图保存到文件中,但android studio抛出了一个异常java。io。FileNotFoundException:/storage/simulated/0/Pictures/savedBitmap。png(权限被拒绝)我做错了什么?
我使用springfox 2.9.2我有这样的api: 女巫来自身份验证服务器。我尝试在swagger中首次调用此服务器,并将其传递给像上面这样的控制器请求。所以我做 在Swagger ui上,授权调用成功返回了令牌,但它没有将令牌添加到请求头中。它会产生 如果我像这样设置令牌:
我们使用Spring Security OAuth2保护我们的REST服务(用于服务器到服务器通信,不涉及用户)。但是,当您尝试访问浏览器中的受保护资源时,它将显示: 我们希望这是我们自己选择的自定义页面。有办法吗? 设置“拒绝访问”页面不起作用。首先,它需要定义一个登录页面,我们没有,因为这是一个纯服务器到服务器的通信。另一个原因是,这个属性自Spring 3.0..或类似的版本以来就被弃用了。
我正在使用 MEAN 堆栈用户注册和登录示例 我想将图像上传到Cloudinary,但收到此错误: XMLHttpRequest无法加载https://api.cloudinary.com/v1_1/xxxx/upload.请求标头字段授权不被预检响应中的Access-Control-Allow-Headers允许。 如何为Cloudinary的请求删除此标头?