当前位置: 首页 > 知识库问答 >
问题:

spring boot angular js http://localhost:8080/logout 403禁止错误

梁丘翔
2023-03-14

我无法解决这个问题。

在我看来,我应该在ui端的每一个请求中添加令牌头,但我不知道如何才能做到这一点?

以下是浏览器开发人员工具消息:

POST 403{“时间戳”:1501570024381,“状态”:403,“错误”:“禁止”,“消息”:“在请求参数'_CSRF'或标头'x-csrf-token'上发现无效的CSRF令牌'null'。”,“路径”:“/helpdesk/logout”}

下面是我的角度注销函数:

 $scope.logout = function() {
    $http.post('logout',{}).success(function() {
      $rootScope.authenticated = false;
      $location.path("/home");
    }).error(function(data) {
      $rootScope.authenticated = false;
    });
  }

下面是我的SpringSecurityConfig配置方法:

 @Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .httpBasic().and()
            .authorizeRequests()
            .antMatchers("/index.html","/pages/**","/","/webjars/**")
            .permitAll()
            .anyRequest()
            .authenticated().and().logout()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout")).permitAll()
            .logoutSuccessHandler(logoutSuccess)
            .deleteCookies("JSESSIONID").invalidateHttpSession(false)
            .and()
            .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class);

}

我该怎么解决这个?如何向所有请求添加令牌标头?你能帮帮我吗?

共有1个答案

王炜
2023-03-14

我解决了我的问题:

首先,我在研究古尔时发现了这个样本。

之后,我应用相同的拦截器我的应用程序,如下所示:

app.factory('CsrfTokenInterceptorService', ['$q',
function CsrfTokenInterceptorService($q) {

    // Private constants.
    var CSRF_TOKEN_HEADER = 'X-CSRF-TOKEN',
        HTTP_TYPES_TO_ADD_TOKEN = ['DELETE', 'POST', 'PUT'];

    // Private properties.
    var token;

    // Public interface.
    var service = {
        response: onSuccess,
        responseError: onFailure,
        request: onRequest,
    };

    return service;

    // Private functions.
    function onFailure(response) {
        if (response.status === 403) {
            console.log('Request forbidden. Ensure CSRF token is sent for non-idempotent requests.');
        }

        return $q.reject(response);
    }

    function onRequest(config) {
        if (HTTP_TYPES_TO_ADD_TOKEN.indexOf(config.method.toUpperCase()) !== -1) {
            config.headers[CSRF_TOKEN_HEADER] = token;
        }

        return config;
    }

    function onSuccess(response) {
        var newToken = response.headers(CSRF_TOKEN_HEADER);

        if (newToken) {
            token = newToken;
        }

        return response;
    }
}]);

并将以下内容添加到App.config方法中:

$httpProvider.defaults.xsrfHeaderName = 'X-CSRF-TOKEN';
$httpProvider.interceptors.push('CsrfTokenInterceptorService');

但现在我有另一个问题。浏览器开始打开自定义身份验证弹出窗口。我得解决这个。

 类似资料:
  • 使用Spring Boot(后端)和React(前端)开发时,我有一个奇怪的行为。React和Spring boot都在本地主机8080上运行。 当我从React to Spring Boot向localhost:8080发送POST请求时,我在Spring Boot中遇到了以下错误: 当我从localhost:3000(React development build)向localhost:808

  • 我在8080端口创建了一个简单的服务器,并使用three.js在我的超文本标记语言文档中加载GLTF文件。这里是服务器端代码,然后是超文本标记语言代码。 现在获取错误-:8080/:1获取http://localhost:8080/404(好)我的两个文件都命名为1。js和1。html。 此外,它还有两个警告- DevTools未能加载SourceMap:无法加载chrome的内容-extensi

  • 因此,这意味着在调用any servlet之前,对/app/的重定向就发生了。 在firefox developer控制台中,我看到发出了两个请求,一个是针对'app',紧接着一个是针对'/app/',这是在调试中输入的请求。在第一个请求(用于“应用程序”)的响应头中,我得到: 连接保持-活动内容-长度0日期Thu,2018年11月15日11:23:06格林威治时间位置http://localho

  • 当我使用HTML2Canvas评估图像时,我得到了这个错误。 CORS策略阻止从来源“http://localhost:8080”访问位于“http://testdomain.com/storage/images/products/user_front.png”的映像:请求的资源上没有“Access-Control-Allow-Origin”标头。 下面是我的cors配置。 有人能帮我吗?

  • (不过反正码头工人这边似乎一切都ok了...)我在网上读过数百篇文章,但无法找到从任何浏览器访问index.html的方法。我想也许我应该在httpd.conf中添加一些Vhosts(就像我在Xampp或Wamp下所做的那样),但我没有在apache容器中找到这个文件,而且我也不知道如何从我的docker-compose YML中为httpd.conf中的Vhosts添加指令。但这是我个人的想法,

  • 我对雄猫的东西真的很陌生。我下载了Tomcat7.0 windows installer,并使用默认配置安装了它。安装后,我在浏览器中键入localhost:8080,查看Tomcat是否正常工作。但是,它显示了如下的错误消息:Access error:404--未找到不能定位文档:/并且页面中没有其他显示Tomcat或Apache单词的内容。似乎Tomcat没有回应。 我谷歌搜索了这个论坛,但到