我有一个HTTP Spring Security配置,当我注释掉各个方面时似乎可以使用,但是当我将Spring
Security规则组合在一起时它不起作用,所以我知道问题不在于regexMatcher
或,antMatcher
而是与所应用的规则有关。组合。
这是我的Spring Security课程:
package com.driver.website.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.csrf.CsrfTokenRepository;
import org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository;
import org.springframework.security.web.header.writers.StaticHeadersWriter;
import org.springframework.security.web.header.writers.frameoptions.XFrameOptionsHeaderWriter;
import org.springframework.security.web.util.matcher.RequestMatcher;
import javax.servlet.http.HttpServletRequest;
import java.security.AccessControlContext;
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${widget.headers.xframeoptions.domains.allowed}")
private String allowedXFrameOptions;
@Value("${widget.headers.origins.allowed}")
private String allowedOrigins;
@Override
public void configure(HttpSecurity http) throws Exception {
// @formatter:off
http.exceptionHandling().accessDeniedPage("/login")
.and()
.formLogin().loginPage("/login").defaultSuccessUrl("/myaccount", true).permitAll()
.and()
.authorizeRequests()
.antMatchers("/**").permitAll();
http.regexMatcher("^((?!(/widget|/assistedSearch)).)*$")
.headers().frameOptions().disable()
.regexMatcher("^((?!(/widget|/assistedSearch)).)*$")
.headers()
.xssProtection()
.contentTypeOptions()
.addHeaderWriter(new StaticHeadersWriter("X-FRAME-OPTIONS", "SAMEORIGIN"));
http.antMatcher("/widget")
.headers()
.frameOptions()
.disable()
.antMatcher("/widget")
.headers()
.addHeaderWriter(new StaticHeadersWriter("X-FRAME-OPTIONS", "ALLOW-FROM " + allowedXFrameOptions));
http.requestMatchers().antMatchers("/assistedSearch", "/widget")
.and()
.headers()
.addHeaderWriter(new StaticHeadersWriter("Access-Control-Allow-Origin", allowedOrigins))
.addHeaderWriter(new StaticHeadersWriter("Access-Control-Allow-Methods", "GET, POST"))
.addHeaderWriter(new StaticHeadersWriter("Access-Control-Allow-Headers", "Content-Type"));
// @formatter:on
}
}
规则应该是…
/widget
端点,我们应该添加X-Frame-Options:ALLOW-FROM标头/widget
和/assistedSearch
终点,我们应该添加Access-Control-Allow-Origin
,Access-Control-Allow-Methods
和Access-Control-Allow-Headers
头正如我上面提到的,如果我注释掉For all urls
规则集,那么其他两个将齐头并进,但是在不For all urls
注释规则的情况下,没有任何标题出现。
有谁知道为什么会这样?如何在Spring Security中添加多个规则集,并用新规则集覆盖现有规则集?
我试过了
http.antMatcher("/widget")
.headers()
.frameOptions()
.disable()
这似乎再次可以单独使用,但不能结合使用。
提前致谢!
您将覆盖以前的匹配器,请参阅HttpSecurity.html#antMatcher:
调用
antMatcher(String)
将覆盖以前调用mvcMatcher(String)}
,requestMatchers()
,antMatcher(String)
,regexMatcher(String)
,和requestMatcher(RequestMatcher)
。
和HttpSecurity.html#regexMatcher:
调用
regexMatcher(String)
将覆盖以前调用mvcMatcher(String)}
,requestMatchers()
,antMatcher(String)
,regexMatcher(String)
,和requestMatcher(RequestMatcher)
。
如果您需要多个配置HttpSecurity
,请参阅Spring
Security Reference
:
我们可以配置多个HttpSecurity实例,就像我们可以具有多个
<http>
块一样。关键是要扩展WebSecurityConfigurationAdapter
多次。例如,以下是对以开头的URL具有不同配置的示例/api/
。
> @EnableWebSecurity
> public class MultiHttpSecurityConfig {
> @Autowired
> public void configureGlobal(AuthenticationManagerBuilder auth) { 1
> auth
> .inMemoryAuthentication()
> .withUser("user").password("password").roles("USER").and()
> .withUser("admin").password("password").roles("USER",
> "ADMIN");
> }
>
> @Configuration
> @Order(1) 2
> public static class ApiWebSecurityConfigurationAdapter extends
> WebSecurityConfigurerAdapter {
> protected void configure(HttpSecurity http) throws Exception {
> http
> .antMatcher("/api/**") 3
> .authorizeRequests()
> .anyRequest().hasRole("ADMIN")
> .and()
> .httpBasic();
> }
> }
>
> @Configuration 4
> public static class FormLoginWebSecurityConfigurerAdapter extends
> WebSecurityConfigurerAdapter {
>
> @Override
> protected void configure(HttpSecurity http) throws Exception {
> http
> .authorizeRequests()
> .anyRequest().authenticated()
> .and()
> .formLogin();
> }
> }
> }
我有以下解析器规则: 和以下lexer规则: 有了上面的规则,我想能够写出下面的代码:
3.4 运行规则分析 本节会给大家提供一个参考实例,用于告诉大家如何根据具体的业务实现自己的爬虫框架。 我们以公共规则中“阿里巴巴产品搜索”为例(这些公共的规则都在github.com/pholcus下面包含,大家可以参考下)。 package spider_lib // 基础包 import ( "github.com/PuerkitoBio/goquery"
有时我们要对程序中一些 url 进行一个美化的操作,为了用户更方便的设置 url 美化功能,我们要应用下对我们应用的url 进行一个规则的设置, 如我们在portal应用下加上url.php配置文件,文件内容如下: <?php // +---------------------------------------------------------------------- // | ThinkC
有时我们要对程序中一些 url 进行一个美化的操作,为了用户更方便的设置 url 美化功能,我们要应用下对我们应用的url 进行一个规则的设置, 如我们在portal应用下加上url.php配置文件,文件内容如下: <?php // +---------------------------------------------------------------------- // | ThinkC
swoole框架使用强规则来做URL映射。如下面的URL http://127.0.0.1/hello/index/ 将会映射到 apps/controllers/Hello.php 中的 Hello::index 方法。 自定义URL 修改 apps/configs/rewrite.php ,增加正则配置。具体使用方法请看示例。 $rewrite[] = array( 'regx' =
一、本功能说明 可以自定义全站各功能模块的相关URL,以便更加符合SEO或者个性化需求 注意事项: 本功能只提供URL规则的管理,具体使用还需要模块支持自定义URL 二、子功能导航 1.添加规则 2.管理规则 三、功能详解 1.添加规则 1).如何进入本功能 导航栏 选择扩展 -> 菜单栏 选择URL规则管理 -> 添加规则 2).界面解释 点击后弹出如下界面 界面详述 1). url规则名称