java - 使用 Angular 和 Spring 进行 Jwt 身份验证

标签 java spring angular spring-mvc authentication

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

我的 cors 过滤器出现问题。用户成功登录后发送 401 状态。不考虑“授权” header 中发送的 token 。

Angular 服务

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 过滤器

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 身份验证过滤器

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

我有什么遗漏吗?

最佳答案

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

关于java - 使用 Angular 和 Spring 进行 Jwt 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44699435/

相关文章:

angular - 以 Angular 更改默认语言环境

Angular 2 | 401未经授权

java - 使用 IBM MQ 资源适配器相对于 RemoteJMSProvider 的优势是什么?

java - 当我从map和hashmap创建对象时有什么区别

spring - 如何使用spring数据elasticSearch搜索单词的一部分

java - 无法提交 JPA 事务 : Transaction marked as rollbackOnly

java - Spring异常: org. springframework.expression.spel.SpelEvaluationException : EL1004E:(pos 8): Method call: Method retrieveRecords(java. util.Vector)

angular - NSwag - 单独的文件生成

java - 将 Java ArrayList 对象转换为 scala seq

java - Swing图形重新定位drawString