即使没有安全性,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 Boot Security 也会在 API 调用上引发 401 身份验证错误
ASP.NET Core JWT 身份验证以保护 webAPI [Authorize] 属性错误 401 Unauthorized
Spring Boot:禁用 Spring Boot 单元测试的安全性 [重复]
Springboot actuator refresh 和 bus-refresh 总是返回 401 Unauthorized