【问题标题】:Jwt authentication with Angular and spring使用 Angular 和 spring 进行 Jwt 身份验证
【发布时间】:2017-11-25 17:38:46
【问题描述】:

我正在使用 JWT 令牌为我的 Angular 应用程序构建身份验证。 对于对其余 api 的任何请求,我希望 spring MVC 检查 http 请求标头中的令牌,除非 http 请求是 /login (以创建新令牌)。

我的 cors 过滤器有问题。用户登录成功后发送 401 状态。不考虑在“授权”标头中发送的令牌。

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);
    }

我有什么遗漏吗?

【问题讨论】:

    标签: java spring angular spring-mvc authentication


    【解决方案1】:

    我现在没有时间尝试分析代码,但我向您推荐 GitHub 中的 project,它展示了一个使用 JWT 和 Java 的简单登录系统。我以它为例在我的一些系统中实现了 JWT,它运行良好。希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      我很难处理这个问题,但我希望答案能节省一些时间。

      实际上,我发现我的 Angular 没有在请求标头中发送标头 authorization。为了解决这个问题,我在我的服务 Angular 中使用了RequestOptions

      service Angular

      getListe(): Promise<any> {
              let header = new Headers();
              header.append("authorization", localStorage.getItem("token"))
              let options = new RequestOptions({headers: header})
              return this.http.get(URL_API_REST + 'liste', options)
                  .toPromise()
                  .then(response => response.json())
                  .catch(this.handleError);
          }
      

      【讨论】:

        猜你喜欢
        • 2018-08-29
        • 2021-05-17
        • 2018-03-12
        • 2017-04-15
        • 2016-04-20
        • 2019-08-18
        • 2016-04-07
        • 2020-07-23
        • 2020-04-13
        相关资源
        最近更新 更多