即使没有安全性,SpringBoot 401 UnAuthorized

Posted

技术标签:

【中文标题】即使没有安全性,SpringBoot 401 UnAuthorized【英文标题】:SpringBoot 401 UnAuthorized even with out security 【发布时间】:2017-12-27 04:12:50 【问题描述】:

我没有使用 Spring Security,但它要求我进行身份验证。

URL(http://localhost:8080/SpringJob/ExecuteJob) 的例外:


    "timestamp": 1500622875056,
    "status": 401,
    "error": "Unauthorized",
    "message": "Bad credentials",
    "path": "/SPPA/ExecuteSPPAJob"

----below log details
2017-07-21 13:15:35.210  INFO 19828 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/SpringJob]   : Initializing Spring FrameworkServlet 'dispatcherServlet'
2017-07-21 13:15:35.210 [http-nio-8080-exec-1] INFO 
                    o.a.c.c.C.[.[localhost].[/SpringJob]-Initializing Spring FrameworkServlet 'dispatcherServlet' 
2017-07-21 13:15:35.211  INFO 19828 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
2017-07-21 13:15:35.211 [http-nio-8080-exec-1] INFO 
                    o.s.web.servlet.DispatcherServlet-FrameworkServlet 'dispatcherServlet': initialization started 
2017-07-21 13:15:35.494  INFO 19828 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 282 ms
2017-07-21 13:15:35.494 [http-nio-8080-exec-1] INFO 
                    o.s.web.servlet.DispatcherServlet-FrameworkServlet 'dispatcherServlet': initialization completed in 282 ms 

应用程序-dev.xml

#Spring Boot based configurations
management.security.enabled: "false"
spring.autoconfigure.exclude:  "org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration"
spring.batch.job.enabled: false
server.contextPath: /SpringJob

build.gradle sn-p

plugins 
    id 'jacoco'
    id 'org.sonarqube' version '2.5'


apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'
apply plugin: "no.nils.wsdl2java"
apply plugin: 'jacoco'
apply plugin: "org.sonarqube"
dependencies 
    compile("org.springframework.boot:spring-boot-starter-web")
    compile("org.springframework.boot:spring-boot-starter-batch")
    compile("org.springframework.boot:spring-boot-starter-mail")
    //compile("org.springframework.boot:spring-boot-devtools")
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.5'
    compile group: 'org.apache.cxf', name: 'cxf-spring-boot-starter-jaxws', version: '3.1.10'
    compile group: 'org.apache.cxf', name: 'cxf-rt-ws-security', version: '3.1.10'
    compile("org.springframework.boot:spring-boot-starter-actuator")
    testCompile('org.springframework.boot:spring-boot-starter-test')

控制器

@Controller
@EnableAutoConfiguration
@EnableBatchProcessing
public class MyController 
    @Autowired
    JobLauncher jobLauncher;

    @RequestMapping("/ExecuteJob")
    @ResponseBody
    public String callPrelegalJob(@RequestParam("user") String userName, @RequestParam("password") String password) 
        log.info("Job is to be launched from controller...");


【问题讨论】:

这是因为 cxf-rt-ws-security 如何解决这个问题,谢谢回复 如果安全不是您的首要任务,您可以注释掉依赖项。否则您需要自定义配置以设置身份验证详细信息 查看techtots.blogspot.in/2016/07/… 有没有办法在 application.properties 中禁用此身份验证?因为 czf-rt-ws-security 仅用于 Spring 的 SOAP 服务调用,而不用于身份验证。 【参考方案1】:

在当前版本的 Spring Boot (v2.1.0.RELEASE) 中,摆脱安全问题的最简单方法是在您的项目中添加“WebSecurityConfig.java”,如下所示:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter 

    @Override
    protected void configure(HttpSecurity http) throws Exception 
        http.csrf().disable();
    


当然请注意,这消除了对跨站点请求伪造的保护,因此这实际上只适用于简单的只读端点。

【讨论】:

【参考方案2】:

尝试在application.properties 文件中添加以下行

security.basic.enable: false
security.ignored=/**

根据spring doc,使用security.ignored=

要从默认安全中排除的路径的逗号分隔列表 路径

【讨论】:

这行得通@Afridi 谢谢,如果可以的话,请提供我的文档链接。 @sunleo 导航到docs.spring.io/spring-boot/docs/current/reference/html/…,然后搜索单词“security.ignored=" @trevorsky 此选项在 1.5.8.RELEASE 版本之前可用,上面的链接引用当前版本,当前版本为 2.1.x。可能他们现在删除了它。 docs.spring.io/spring-boot/docs/1.5.8.RELEASE/reference/html/… @alfridi 谢谢,是的,与 2+ 相比,这个领域看起来发生了很大变化。我们最终添加了一段明确的代码来禁用安全性,作为临时修复,直到我们优先考虑学习并添加适当的安全配置。对于像我这样偶然发现此主题的其他人,我会将其添加为下面的答案。 这些已被弃用【参考方案3】:

只需从 pom.xml 文件中删除 spring 安全依赖项。 为我工作:)..

【讨论】:

删除这个:compile('org.springframework.boot:spring-boot-starter-security'),如果它存在的话【参考方案4】:

如果我们使用 CXF 安全性和 Spring Boot 安全性,就会出现这个问题。 注释掉依赖项,即禁用 Spring Boot 安全性然后它允许。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>       
</dependency>

要启用此功能,我们必须编写自定义安全性或添加以下配置

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter 
    @Override
    protected void configure(HttpSecurity http) throws Exception 
        http.authorizeRequests().anyRequest().permitAll();
    

【讨论】:

它适用于 Spring boot 2.2.6.RELEASE,谢谢【参考方案5】:

我找不到禁用身份验证的确切方法。但是通过删除正在工作的执行器依赖项。

compile("org.springframework.boot:spring-boot-starter-actuator")

【讨论】:

【参考方案6】:

@harshit-sharma 的解决方案对我有用;我在主应用程序类中添加了排除项:

@SpringBootApplication(exclude = SecurityAutoConfiguration.class )

【讨论】:

【参考方案7】:

您可以将 springSecurityFilterChain 配置为忽略所有请求,从而允许对您的所有端点进行未经身份验证的访问:

@Configuration
@EnableWebSecurity
public class WebConfiguration extends WebSecurityConfigurerAdapter 


    @Override
    public void configure(WebSecurity web) throws Exception 
        web.ignoring().antMatchers("/**");
    


【讨论】:

请在您的回答中添加解释 还有什么包是WebSecurity。我实际上想打开一个点,但我不能导入WebSecurity @JGleason WebSecurity 位于 spring-security 的 spring-security-config 中。【参考方案8】:

Spring Security 可能仍通过传递依赖项存在于项目库中。在 Spring Boot 中应该仍然有效的是:

    @Override
    public void configure(HttpSecurity http) throws Exception 
        http
                .authorizeRequests()
                .antMatchers("/**")
                .permitAll();
    

注意:http 是一个org.springframework.security.config.annotation.web.builders.HttpSecurity,它在一个@Component 中,它可能已经被一些org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter implementation 在你的应用程序的框架中注入和调用。这应该覆盖任何内置的 catch-all 子句,即 http.authorizeRequests().anyRequest().denyAll() 用于测试等目的。

【讨论】:

【参考方案9】:

我通过从 pom.xml 中删除此依赖项来解决

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
 </dependency>

【讨论】:

以上是关于即使没有安全性,SpringBoot 401 UnAuthorized的主要内容,如果未能解决你的问题,请参考以下文章

即使使用 permitall antMatchers,Spring boot Oauth 2 配置也会导致 401

尝试某些请求时出现Spring安全性和角度401错误

即使凭据为真,Spring Boot Security 也会在 API 调用上引发 401 身份验证错误

ASP.NET Core JWT 身份验证以保护 webAPI [Authorize] 属性错误 401 Unauthorized

Spring Boot:禁用 Spring Boot 单元测试的安全性 [重复]

Springboot actuator refresh 和 bus-refresh 总是返回 401 Unauthorized