我正在使用JWT令牌为我的角应用构建身份验证 . 对于对其余api的任何请求,我希望spring httpC检查http请求标头中的令牌,除非http请求是/ login(创建新令牌) .
我的cors过滤器有问题 . 用户成功登录后,它将发送401状态 . 不考虑在“授权” Headers 中发送的令牌 .
angular service
getListe(): Promise<any> {
let header = new Headers();
header.append("authorization", localStorage.getItem("token"))
return this.http.get(URL_API_REST + 'liste', header)
.toPromise()
.then(response => response.json())
.catch(this.handleError);
}
Spring Cors Filter
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request= (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type");
response.setHeader("Access-Control-Expose-Headers", "x-requested-with");
if(!request.getRequestURI().equals("/rest/rest/login")) {
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization");
response.setStatus(HttpServletResponse.SC_OK);
}
/*if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
*/
chain.doFilter(req, res);
}
Spring Authentication Filter
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request= (HttpServletRequest) servletRequest;
String token = request.getHeader("token");
if(token != null){
System.out.println("Présence d'un token");
}
else{
if(!request.getRequestURI().equals("/rest/rest/login"))
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
}
filterChain.doFilter(request, response);
}
我有什么遗失的吗?
2 回答
我现在没有时间尝试分析代码,但我建议您在GitHub中使用J16和Java来显示一个简单的登录系统project . 我已经用它作为一个例子在我的一些系统中实现JWT并且它工作得很好 . 希望能帮助到你 .
我很难处理这个问题,但我希望答案能为一些人节省时间 .
实际上,我发现我的角度没有在请求标头中发送标头
authorization
. 为了解决这个问题,我在我的服务Angular中使用了RequestOptions
.service Angular