我有一个基于Spring-Boot版本构建的仅REST微服务1.5.4.RELEASEspring-boot-starter-security。该服务没有网页,只有JSON输入和输出。用户名和密码在application.properties文件中配置。值得称赞的是http://ryanjbaxter.com/2015/01/06/securing-rest-apis-with-spring-boot/以下配置使服务器很好地实现了基本的HTTP身份验证,它接受凭据并拒绝未经授权的请求:
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests() //
.anyRequest().authenticated().and().httpBasic();
}
}
我的问题是,我想从基本HTTP认证中排除一个小ole路径,一个小endpoint。通过疯狂的谷歌搜索和复制粘贴,我修改了上面的内容:
http.csrf().disable().authorizeRequests() //
.antMatchers("/healthcheck").permitAll()
.anyRequest().authenticated().and().httpBasic();
这会在没有警告的情况下编译和运行,但不会打开该路径进行未经验证的访问。我仍然必须提供凭据以检查服务运行状况。
我必须一个一个地匹配路径吗?我的小healthcheckendpoint在上下文路径的基础上,就像一大堆其他endpoint一样——逐个添加路径会很麻烦。
我申请的相关部分。属性文件是:
security.user.name = web-user
security.user.password = web-pass
management.security.roles=SUPERUSER
也许我需要摆弄一下角色?
请帮忙,提前谢谢。
更新1:
路径信息-我希望这个路径(以及更多的根)被保护:
localhost:8081/abcd/user
我只希望这一条路径是开放的,不需要身份验证:
localhost:8081/abcd/healthcheck
更新2:看起来我在很大程度上重复了这个3年前的问题,但我的问题没有答案被接受:
单个web应用程序路径上的spring-boot设置基本身份验证?
你说你的链接看起来像:
localhost:8081/abcd/healthcheck
试试这个:
http.csrf().disable().authorizeRequests() //
.antMatchers("/abcd/healthcheck").permitAll()
.anyRequest().authenticated().and().httpBasic();
我已将以下内容添加到我的Springboot服务中的SecurityConfig中,并且它工作正常,我能够从基本身份验证中排除某些endpoint。
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/customers/**/hints", "/customers/**/search", "/customers/**/clientConfig");
}
经过更多的实验,我发现以下工作 - @efekctive请注意,运行状况检查上没有上下文前缀:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests()
.antMatchers("/healthcheck").permitAll()
.antMatchers("/**").authenticated().and().httpBasic();
}
一个大警告:当我发布此消息时,我正在测试healthcheckendpoint,通过使用伪造的http凭据调用curl,期望Spring忽略它们,但Spring总是回答401未经授权。正确的测试是在完全没有http凭据的情况下调用curl,然后healthcheckendpoint非常满意地回答。
问题似乎重复了,但我面临一些问题,当我遵循以下配置从这个Spring Boot战争没有嵌入tomcat排除嵌入tomcat服务器 时,我在作业中使用Spring-Web使用Rest模板调用Rest服务。
我尝试了angular.js,并从一个restful api的web-ui开始(使用超文本传输协议基本授权)。这真的很好,除了授权工作。 到目前为止,我使用的是设置密码,但大多数情况下浏览器会打开http basic auth的默认登录表单。另一个奇怪的行为是angular请求不包含授权头(选项和GET请求都不包含)。我还尝试使用header配置在每个请求上设置此header,但这也不起作用。 有
问题内容: 我正在尝试使用Spring Security做一个非常简单的基本身份验证。我已经正确配置了名称空间,并且服务器中没有异常。在我的“ servlet.xml”中,我获得了Spring Security的下一个: 几乎一切都完美了:没有的方法不会提示任何登录表单,而方法会提示它。问题是,或者,都不能登录那里。谁能看到我在做什么错? 提前致谢!;-) 问题答案: 自动应答 T_T为此,我花了
问题 你想在网络上创建一个 HTTP 服务器。在这个方法中,我们将逐步从最小的服务器成为一个功能键值存储。 解决方案 我们将使用 node.js HTTP 库并在 Coffeescript 中创建最简单的 web 服务器。 开始 'hi\n' 我们可以通过导入 node.js HTTP 模块开始。这会包含 createServer ,一个简单的请求处理程序返回 HTTP 服务器。我们可以使用该服务
我有一个创建的Spring引导Restapi,我打算从另一个应用程序调用。我如何才能以这样一种方式保护它,我只能从那个应用程序调用我的api。 我在这方面很新,所以我真的不知道怎么做,因为我是SpringSecurity的新手。 谢谢你的建议。
有没有办法对/oauth/tokenendpoint禁用HTTP基本身份验证?我希望在JSON主体或请求头中发送client_id和client_secret。 我想工作的卷曲例子: 或