如何仅通过配置禁用特定URL的spring安全性?

问题描述 投票:0回答:1

我有一个特定的应用程序URL-https://baseurl/contextroot。它是一个打包在Spring Boot应用程序中的Angular5应用程序。我想为除https://baseurl/contextroot/path1之外的所有URL启用spring security。

我的应用程序没有用户登录。

我根据搜索论坛的结果尝试了以下类似操作。下面的代码甚至没有加载我的应用程序https://baseurl/contextroot,它返回403。

错误:(类型=禁止,状态= 403)。在请求参数'_csrf'或标头'X-XSRF-TOKEN'上发现无效的CSRF令牌'null'。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        // Build the request matcher for CSFR protection
        RequestMatcher csrfRequestMatcher = new RequestMatcher() {

            // Disable CSFR protection on the following urls:
            private AntPathRequestMatcher[] requestMatchers = {  new AntPathRequestMatcher("/**/path1")
            };

            @Override
            public boolean matches(HttpServletRequest request) {
                // If the request match one url the CSFR protection will be disabled
                for (AntPathRequestMatcher rm : requestMatchers) {
                    if (rm.matches(request)) {
                        return false;
                    }
                }
                return true;
            } // method matches

        }; // new RequestMatcher

        http.headers().frameOptions().disable();
        http.csrf()
            .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
            .and()
         // Disable the csrf protection on some request matches
         .csrf()
         .requireCsrfProtectionMatcher(csrfRequestMatcher);

        return;
    } // method configure
}

而且我的应用程序将是一个子应用程序,加载到iframe中,并且我只想允许某些URL加载到我的应用程序中,我找到了添加标头编写器的选项,但无法获得类似下面的内容。

http.headers().frameOptions().disable();
http.headers().addHeaderWriter(new XFrameOptionsHeaderWriter(
        new WhiteListedAllowFromStrategy(Arrays.asList("allowed-website-1","allowed-website-2"))));
spring spring-security csrf
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.