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

如何用Spring Security和SSL忽略某些路径?

申光临
2023-03-14

这是我的Spring配置:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.config.http.SessionCreationPolicy;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class X509Configuration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/ws/items.wsdl");
    }

    @Override
    public void configure(final HttpSecurity http) throws Exception {
        http
            .sessionManagement()
                 .sessionCreationPolicy(SessionCreationPolicy.NEVER)
                 .and()
            .authorizeRequests()
                 .antMatchers("/ws/items.wsdl").permitAll()
                 .and()
            // require authorization for everything else
            .authorizeRequests()
                 .anyRequest().authenticated()
                 .and()
            .x509()
                 .subjectPrincipalRegex("CN=(.*?)(?:,|$)")
                 .userDetailsService(userDetailsService())
                 .and()
            .csrf().disable()

            // configure form login
            .formLogin().disable()

            // configure logout
            .logout().disable();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        return new UserDetailsService() {
            @Override
            public UserDetails loadUserByUsername(String username) {
                if (username.equals("cid")) {
                    return new User(username, "",
                        AuthorityUtils
                                .commaSeparatedStringToAuthorityList("ROLE_USER"));
                }
                throw new UsernameNotFoundException("User not found!");
            }
        };
    }
}
server:
  port: 8443
  ssl:
    enabled: true
    key-store: 'classpath:keystore.jks'
    key-store-password: 'changeit'
    key-password: 'changeit'
    trust-store: 'classpath:truststore.jks'
    trust-store-password: 'changeit'
    client-auth: need

共有1个答案

鲜于允晨
2023-03-14

删除此:

.authorizeRequests()
                 .antMatchers("/ws/items.wsdl").permitAll()

web配置表示忽略该路径,而http安全性表示通过Auth请求该路径。

 类似资料:
  • 项目中经常会生成一些Git系统不需要追踪(track)的文件。典型的是在编译生成过程中 产生的文件或是编程器生成的临时备份文件。当然,你不追踪(track)这些文件,可以 平时不用"git add"去把它们加到索引中。 但是这样会很快变成一件烦人的事,你发现 项目中到处有未追踪(untracked)的文件; 这样也使"git add ." 和"git commit -a" 变得实际上没有用处,同时

  • 问题内容: 我收到此错误,因为其中一位用户在他的帖子中添加了 错误:[$ sanitize:badparse]清理程序无法解析以下html块:<3 我写的代码 我想他要采取仅标签和标签 那可能吗? 谢谢! 问题答案: 您可以创建过滤器,以清理HTML。 我在其中使用了strip_tags函数 http://phpjs.org/functions/strip_tags/ 控制器: 视图: http:

  • 问题内容: 我有这样的XML消息: 我想将被测试方法产生的这种类型的消息与预期的消息进行比较,但我不在乎。因此,我希望以上消息被认为等于: 我正在使用XMLUnit的最新版本。 我在想答案是创建一个习惯。如果有准备好要使用的东西,我只是不想重新发明轮子。 欢迎使用XMLUnit以外的库的建议。 问题答案: 自从回答了这个问题以来,XMLUnit发生了很多变化。 现在,您可以在使用时轻松忽略节​​点

  • 问题内容: 鉴于以下课程 当我们验证它(例如,使用@Valid)并且如果Website.url不遵守我的自定义@ValidUrl约束时,我们将遇到约束冲突(例如,“ URL不可访问”)。 我想知道如果用户愿意,是否可以忽略该验证。 脚步: 第一次验证表格 引发约束冲突并将其显示给用户 用户选择“我知道,仍然添加”,然后重新提交 第二次验证表单,验证@ValidUrl以外的所有内容 问题答案: 您可

  • 我有Solr 5.3.1,需要查询除某些字段之外的所有字段(我需要在某些字段中搜索而不是以这种方式检索字段[/?q=query&fl=field1,field2,field3]) 2.[以下解决方案有效,但需要更多时间] 3.我在data-config.xml中设置了indexed=“false”,它只忽略此字段中的搜索,但是当我搜索所有字段http://localhost:8983/solr/t

  • 我正在制作一个不和谐机器人来跟踪在语音频道上花费的时间,但我想知道我是如何做到的,它不计算在某个频道上的成员的时间,比如afk频道。 这是我现在正在使用的事件