最近,我将JWT身份验证引入了我的基于Springboot和Angualr2的应用程序。在那里,我试图通过在Angualr代码中传递如下所示的JWT令牌来执行POST请求
save(jobId: number, taskId: number, note: Note) {
return this.http.post(environment.APIENDPOINT + '/jobs/' + jobId + '/tasks/' + taskId + '/notes', note, this.setHeaders()).map((response: Response) => response.json());
}
private setHeaders() {
// create authorization header with jwt token
let currentUser = JSON.parse(localStorage.getItem('currentUser'));
console.log("Current token---"+ currentUser.token);
if (currentUser && currentUser.token) {
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('authorization','Bearer '+ currentUser.token);
let r = new RequestOptions({ headers: headers })
return r;
}
}
但是,在服务器端,它返回状态代码401。问题在Springboot端,它检查授权头,如下所示,并返回null
String authToken = request.getHeader("authorization ");
然后,我查看了请求头,它在Access-Control-Request-Headers下有授权头,如下所示。但服务器端不可见。
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addExposedHeader("authorization");
config.addAllowedMethod("OPTIONS");
config.addAllowedMethod("GET");
config.addAllowedMethod("POST");
config.addAllowedMethod("PUT");
config.addAllowedMethod("DELETE");
//config.addExposedHeader("Content-Type");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
在阅读了SideShowBarker下面的评论后,我能够理解这个问题背后的基础。在我的项目中,我有一个JWT令牌过滤器,它总是检查授权头。然后我修改了如下,现在它按预期工作
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
try {
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
}else{
String authToken = request.getHeader(this.tokenHeader);
jWTTokenAuthenticationService.parseClaimsFromToken(authToken);
--
}
chain.doFilter(request, response);
}Catch(AuthenticationException authEx){
SecurityContextHolder.clearContext();
if (entryPoint != null) {
entryPoint.commence(request, response, authEx);
}
}
}
您需要将服务器配置为不需要对选项
请求进行授权(即请求发送到的服务器,而不是为前端代码服务的服务器)。
那是因为正在发生的事情是这样的:
Authorization
标头的请求。Authorization
标头的请求需要我执行CORS预飞行选项
以确保服务器允许具有Authorization
标头的请求。options
请求发送到服务器,而没有Authorization
标头,因为options
检查的全部目的是查看是否可以包含该标头。options
请求,但它不是以指示它允许请求中的Authorization
标头的方式响应它,而是以401拒绝它,因为它缺少标头。post
请求。我希望根据响应对象错误动态返回HTTPStatus代码,如400、400、404等。我被提到这个问题--使用Spring3RESTful以编程方式更改http响应状态,但没有帮助。 我有一个带有方法的控制器类 是一个类,其中有上面使用的两个方法(和)。 我不想签入if条件并相应地返回响应代码,有没有其他更好的方法来做到这一点?
问题内容: 我正在尝试使用node.js将http请求发送到neo4j数据库。这是我正在使用的代码: 我检查数据库是否正在运行(我已连接到管理网页,并且一切正常。)恐怕问题不在数据库方面,而在node.js方面。 我希望有人可以对此问题有所启发。我想学习如何在node.js中发送http请求,答案不必特定于neo4j问题。 提前致谢 问题答案: 如果是简单的GET请求,则应使用 否则,需要关闭。
很多时候我们需要在页面打开的时候,读取远程的内容,然后在当前页面显示. 这就需要用到 http请求了. vue页面调用http请求 vuejs 内置了对发送http请求的支持. 只需要在对应页面的script 标签内加上对应的代码就好. 例如: 我们新增一个页面,叫 "博客列表页" : src/components/BlogList.vue, 内容如下: <template> <div >
本文向大家介绍Golang发送http GET请求的示例代码,包括了Golang发送http GET请求的示例代码的使用技巧和注意事项,需要的朋友参考一下 使用标准库http来实现 以上就是Golang发送http GET请求的示例代码的详细内容,更多关于Golang发送http GET请求的资料请关注呐喊教程其它相关文章!
本文向大家介绍java发送http请求并获取状态码的简单实例,包括了java发送http请求并获取状态码的简单实例的使用技巧和注意事项,需要的朋友参考一下 目前做项目中有一个需求是这样的,需要通过java发送url请求,查看该url是否有效,这时我们可以通过获取状态码来判断。 通过uConnection.getResponseCode()可以获取状态码。进而判断该网站是否存在。下面是不同状态码代表
问题内容: 我们正在使用AngularJS和Java Servlet开发RESTful Web服务。当用户登录时,我们的后端会向前端发送一个“ Set-Cookie”标头。在Angular中,我们通过(ngCookie-module)访问标头并进行设置。 现在,用户已登录,他可以例如删除一些东西。因此,前端将GET请求发送到后端。因为我们在不同的域上工作,所以我们需要设置一些CORS标头,并且An