【问题标题】:Problem get jwt with Spring boot to angular问题让 Spring Boot 的 jwt 变为 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;
    }
}

如果有人有想法?

非常感谢

【问题讨论】:

    标签: java angular spring cookies jwt


    【解决方案1】:

    只要在控制器类声明上方添加@CrossOrigin("http://yourAngularUrl:port") 注释就足够了。 因此,如果您在本地机器上进行开发,并使用默认角度端口,注释将如下所示

    @CrossOrigin("http://localhost:4200")
    @RestController
    public class HelloCOntroller{}
    

    【讨论】:

      猜你喜欢
      • 2017-09-13
      • 2017-09-09
      • 2019-04-02
      • 2020-09-08
      • 2019-01-24
      • 2020-03-01
      • 2019-05-05
      • 2018-10-29
      • 2023-04-04
      相关资源
      最近更新 更多