问题让 Spring Boot 的 jwt 变为 Angular
Posted
技术标签:
【中文标题】问题让 Spring Boot 的 jwt 变为 Angular【英文标题】:Problem get jwt with Spring boot to angular 【发布时间】:2021-08-02 05:03:40 【问题描述】:我遇到了从 Angular 到 Spring 的 POST 请求的问题。这是我在控制台中的错误。
后端,我已经正确输入了我的 CORS 参数
protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response, final FilterChain filterChain) throws ServletException, IOException
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
res.setHeader("Access-Control-Allow-Origin",request.getHeader("origin"));
res.setHeader("Access-Control-Allow-Credentials", "true");
res.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
res.setHeader("Access-Control-Max-Age", "3600");
res.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
try
String jwt = getJwtFromCookie(request);
if (agentProxy.authSuccess(jwt))
filterChain.doFilter(request,response);
else
response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
catch (Exception ex)
ex.printStackTrace();
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
当我恢复 JWT 时
String jwt = getJwtFromCookie(request);
他一无所获。 我的额头用我的方法:
createNoteRessource(noteRessource: NoteRessourceModel, idRessource: number)
const headers: HttpHeaders = new HttpHeaders();
headers.append('Content-Type', 'application/json');
headers.append('Access-Control-Allow-Origin','*');
const httpOption =
headers: new HttpHeaders('Content-type':'application/json'),
withCredentials:true
;
return this.http.post(
this.baseUrl+'/noteRessource/create/'+idRessource, noteRessource, httpOption).pipe(
tap(_=> this.log("Ajout d'une note ressource")),
catchError(this.handleError<NoteRessourceModel>("createNoteRessource"))
);
不管我如何扭转这个问题,一无所获,我一直在寻找 2 天。
我真的不明白这个问题。我的网址是正确的... 当我在客户端看到我的 POST 请求的标头时,我有疑问。
坦率地说,我没有看到... 背面我没有 Cookie,即使我有一些
private String getJwtFromCookie(HttpServletRequest request)
Cookie[] cookies = request.getCookies();
if(cookies==null)
return "";
for (Cookie cookie : cookies)
if (cookie.getName().equals("AuthToken"))
String accessToken = cookie.getValue();
if (accessToken == null)
return null;
return accessToken;
return null;
如果有人有想法?
非常感谢
【问题讨论】:
【参考方案1】:只要在控制器类声明上方添加@CrossOrigin("http://yourAngularUrl:port")
注释就足够了。
因此,如果您在本地机器上进行开发,并使用默认角度端口,注释将如下所示
@CrossOrigin("http://localhost:4200")
@RestController
public class HelloCOntroller
【讨论】:
以上是关于问题让 Spring Boot 的 jwt 变为 Angular的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot集成JSON Web Token(JWT)
Spring Boot - 使用 JWT、OAuth 以及单独的资源和身份验证服务器
带有 spring-boot 和 spring-security 的 JWT
Spring Boot JWT token 基于角色的授权问题