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

Spring Boot不支持基本安全性

蔚学林
2023-03-14

我正在尝试建立一个带有基本身份验证的普通Spring Boot环境。

基本上,我只想自定义用户、受保护的路径和自定义密码编码器。

Spring Boot留档状态:

要在不更改任何其他自动配置功能的情况下覆盖访问规则,请添加一个带有@Order(SecurityProperties.access_override_Order)的WebConfigurerAdapter类型的@Bean。

注意:我认为WebConfigurerAdapter应该是WebSecurityConfigurer适配器。

所以我尝试了以下方法:

protected static class ApplicationSecurity extends WebSecurityConfigurerAdapter {

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http
            .authorizeRequests()
                .antMatchers("/assets/**").permitAll()
                .antMatchers("/api/**").hasRole("USER")
                .antMatchers("/management/**").hasRole("ADMIN");
        // @formatter:on
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        // @formatter:off
        auth
            .inMemoryAuthentication()
                .passwordEncoder(passwordEncoder)
                .withUser("admin")
                    .password(passwordEncoder.encode("pwd"))
                    .roles("USER", "ADMIN")
                    .and()
                .withUser("user")
                    .password(passwordEncoder.encode("pwd"))
                    .roles("USER");
        // @formatter:on
    }
}

默认启动安全性似乎正是我想要的:

security.enable-csrf=false
security.basic.enabled=true 
security.sessions=stateless

但是,当我运行应用程序时,基本身份验证不起作用。

当我在我的 Web 安全配置中显式配置它时使用 http.httpBasic() 像:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // @formatter:off
        http
            .httpBasic()
                .and()
            .authorizeRequests()
                .antMatchers("/assets/**").permitAll()
                .antMatchers("/api/**").hasRole("USER")
                .antMatchers("/management/**").hasRole("ADMIN");
        // @formatter:on
    }

然后基本身份验证开始工作。

所以上面的初始设置似乎没有采用默认配置。

我错过了什么吗?

共有1个答案

太叔飞翰
2023-03-14

每个WebSecurityConfigrer都有自己的过滤器链,带有自己的请求匹配器和安全规则。添加WebSecurityConfigrer(抱歉文档中的错别字)不会改变默认的引导自动配置过滤器链,但它也不会为自己的过滤器链做任何神奇的事情。你需要告诉Spring Security如何保护这些资源——你给了它访问规则,但没有身份验证策略。有道理吗?

 类似资料:
  • 具有状态405和身份验证的页面不工作。 来自 Spring 引导日志的错误 o.s.web.servlet.不支持请求方法POST jsp页面出错: 白标错误页面 该应用程序没有针对/error的显式映射,因此您可以将它视为一个后备。 出现意外错误(类型=不允许方法,状态=405)。不支持请求方法“POST” Spring信息: -使用Spring Security 3.2.5 -使用Spring

  • 我需要使用身份验证协议Kerberos,使用Camel将ActiveMQ消息路由到Kafka(Cloudera)。 活动 MQ v5.15.4 骆驼:2.21.1 Kafka客户端:1.1.0 服务器版本: 阿帕奇/2.4.6(仙人掌) Kafka安全文档声明它只支持Kerberos的SSL明文和SASL_SSL 另一方面,当我试图在Camel中使用SASL明文作为安全协议时,我在ActiveMQ

  • 我正在尝试使用 JDBC 函数使用 Google Apps 脚本连接到我的 MS-SQL DB。我们使用Windows集成安全性,但是当我尝试使用此参数进行连接时,我收到一条错误消息,指出它不受支持。 我已经尝试提供我的windows凭据,并使用参数“IntegratedSecurity=true”,但无法连接,尝试使用服务器IP和名称,但也不起作用。 我也尝试过这种形式: 它应该连接到服务器,但

  • 我刚刚开始学习Java Spring Boot for REST API开发。在下面的代码中,GET方法可以正常工作,但POST不能。 在Postman应用程序中使用as 错误 在日志中我可以看到, maven的Java和springboot版本,

  • 我正在尝试让Spring 4.1.9和Thymeleaf 2.1.5渲染XHTML Basic 1.1页面,它们具有以下序言: 简单地在模板中使用它是行不通的,因为百里香叶不能识别doctype。 org . thyme leaf . exceptions . templateprocessingexception:使用public id "-//W3C//DTD XHTML Basic 1.1/

  • 我无法在注释中使用方法。还有给出。我错过了什么?尽管工作正常。 我正在从数据库中为用户分配权限。