我将Spring security用于包含一组Restful服务的Spring启动应用程序。我已经通过基本身份验证启用了网络安全。我希望启用基本的身份验证,除了以特定模式结尾的特定API URL。(例如,healthcheck API,如:/application/_healthcheck)
代码如下所示:
@Configuration
@EnableWebSecurity
public class ApplicationWebSecurityConfigurer extends WebSecurityConfigurerAdapter {
@Autowired
private AuthenticationEntryPoint authEntryPoint;
@Value("${application.security.authentication.username}")
private String username;
@Value("${application.security.authentication.password}")
private String password;
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.anyRequest().authenticated()
.and().httpBasic()
.authenticationEntryPoint(authEntryPoint);
}
@Autowired
public void configureGlobal(final AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser(username).password(password).roles("USER");
}
@Override
public void configure(final WebSecurity web) throws Exception {
web.ignoring().antMatchers("*/_healthcheck");
}
}
然而,每当我调用/应用程序/_HealthCheckURL,浏览器总是提示我输入凭据。
或者,我甚至试图从Spring boot的应用程序中忽略这个路径。属性(删除了web.ignering()的configure方法。antMatchers(“*/_healthcheck”)),但仍然无法摆脱此endpoint的身份验证
security.ignored=/_healthcheck,*/_healthcheck
试试这个。这将跳过健康URL的身份验证部分。
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.antMatchers("*/_healthcheck").permitAll() // added this line
.anyRequest().authenticated()
.and().httpBasic()
.authenticationEntryPoint(authEntryPoint);
}
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/application/_healthcheck");
}
上面的示例和您的代码的区别是使用web
over超文本传输协议
。尝试使用web,看看它是否工作{实际上它应该:)}。
您可以创建一个权限列表,并使用它来禁用安全性。
List<String> permitAllEndpointList = Arrays.asList(
AUTHENTICATION_URL,
REFRESH_TOKEN_URL,
EXTERNAL_AUTH_URL,
"/swagger-resources",
"/swagger-resources/**",
"/swagger-ui.html"
);
然后将此语句添加到HttpSecurity对象中
.and()
.authorizeRequests()
.antMatchers(permitAllEndpointList.toArray(new String[permitAllEndpointList.size()]))
.permitAll()
这将解决你的问题。
问题内容: 我正在使用无状态Spring Security,但是如果要注册,我想禁用Spring Security。我禁用了 但它不起作用,我在下面收到错误消息: 我认为这意味着弹簧安全过滤器正在工作 我的网址顺序始终为“ / api / v1” 我的spring配置是 我的身份验证过滤器是 我的控制器是 我怎么做? 问题答案: 使用它意味着每个经过身份验证的用户,但是你禁用了匿名访问,因此将无法
我开发了一些Rest应用程序,但Spring安全配置存在问题。 在我的Rest应用程序中,帮我处理一下Spring Security 4的xml配置。 当我发送用户名时 这是我的网络.xml: http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 更新 1: 这是我发送请求时的日志:
null
我的控制器是 我对Spring完全陌生,请帮帮我怎么做?
Csrf筛选器验证从“验证”提交的Csrf令牌,当我从HTTP向https提交请求时,抛出无效令牌异常(403)。如何在这种情况下禁用csrf令牌身份验证?
当我使用security.basic.enabled=false在具有以下依赖项的Spring Boot项目上禁用安全性时: 为了修复此异常,我必须添加属性-management.security.enabled=false。我的理解是,当执行器在类路径中时,应该将security.basic.enabled=false和management.security.enabled=false设置为禁用