问题让 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 基于角色的授权问题

Spring boot、jwt、jersey、spring security和CORS问题

Spring/Boot - JWT 未在 GET 请求中获取