- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编辑:
我进一步深入研究了问题,发现即使使用单一配置,问题仍然存在。如果我使用单一配置并保留
http.antMatcher("/api/test/**")
网址不安全。删除 antMatcher 和 antMatchers 会立即保护 url。即如果我使用:
http.httpBasic()
.and()
.authorizeRequests()
.anyRequest()
.authenticated();
那么只有 Spring Security 正在保护 url。为什么 antMatcher 无法运行?
(更新了标题以包含实际问题。)
<小时/>原帖:
我提到了以下 stackoverflow 问题:
和 Spring Security 文档:
https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#multiple-httpsecurity
但我无法配置多个 http 安全元素。当我遵循官方 spring 文档时,它在我的情况下才有效,因为第二个 http 安全元素是包罗万象的,但是一旦我添加特定的 url,就可以访问所有 url,无需任何身份验证。
这是我的代码:
@EnableWebSecurity
@Configuration
public class SecurityConfig {
@Bean
public UserDetailsService userDetailsService() throws Exception {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withUsername("user").password("userPass").roles("USER").build());
manager.createUser(User.withUsername("admin").password("adminPass").roles("ADMIN").build());
return manager;
}
@Configuration
@Order(1)
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
public void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.inMemoryAuthentication().withUser("user").password("user").roles("USER");
auth.inMemoryAuthentication().withUser("admin").password("admin").roles("ADMIN");
}
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/v1/**")
.authorizeRequests()
.antMatchers("/api/v1/**").authenticated()
.and()
.httpBasic();
}
}
@Configuration
@Order(2)
public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
public void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.inMemoryAuthentication().withUser("user1").password("user").roles("USER");
auth.inMemoryAuthentication().withUser("admin1").password("admin").roles("ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/test/**")
.authorizeRequests()
.antMatchers("/api/test/**").authenticated()
.and()
.formLogin();
}
}
}
现在任何网址都可以访问了。如果我从第二个配置中删除 antMatcher,所有网址都会受到保护。
最佳答案
该模式不得包含上下文路径,请参阅AntPathRequestMatcher
:
Matcher which compares a pre-defined ant-style pattern against the URL (
servletPath
+pathInfo
) of anHttpServletRequest
.
和HttpServletRequest.html#getServletPath
:
Returns the part of this request's URL that calls the servlet. This path starts with a "/" character and includes either the servlet name or a path to the servlet, but does not include any extra path information or a query string. Same as the value of the CGI variable SCRIPT_NAME.
和HttpServletRequest.html#getContextPath
:
Returns the portion of the request URI that indicates the context of the request. The context path always comes first in a request URI. The path starts with a "/" character but does not end with a "/" character. For servlets in the default (root) context, this method returns "". The container does not decode this string.
您修改和简化的代码:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/test/**")
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin();
}
关于java - Spring security antMatcher 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48295894/
这个问题已经有答案了: When to use Spring Security`s antMatcher()? (2 个回答) 已关闭 3 年前。 我正在学习 Spring Security,我从 h
只是想看看我是否在解释 answer to this question正确的方法。 如果我们只需要像这样保护一条路径: http.antMatcher("/api/**").authorizeRequ
我有两种配置: @订单(1) @Override protected void configure(HttpSecurity http) throws Exception { http.ant
我有将用于身份验证的 REST 服务。身份验证端点将类似于 /api/v.1/authentication . API 版本是一个可以更改以反射(reflect)更新版本的变量。一个例子是 /api/
我有一个我想提供给 antMatchers() 的路径列表.但是由于这个列表是动态的,我不能提供逗号分隔的路径。我目前正在遍历列表并将 eachPath 添加到 antMatcher() .有没有更好
我有我的自定义 Controller "/my-endpoint" 和具有以下配置的 spring 应用程序: @Override public void configure(Http
我正在学习spring-boot,对于我的大脑来说,为了接受一些东西,它需要对这些东西找到一个有意义的解释。有人能告诉我“antMatchers”中的“ant”是什么意思吗?像“ Ant ”这样的昆虫
我有一个基本的 Spring 应用程序,它具有各种端点和一个登录页面,通过配置 WebSecurityConfigurerAdapter 的 HttpSecurity 来定义。 我有一个服务,可以查找
我有以下 spring 安全配置片段: http .authorizeRequests() .antMatchers("/tokens").hasIpAddress("10.0.0.0/1
我有以下可用的 spring security java config rule(3.2.4 版): http.antMatcher("/lti1p/**") .addFilterBefore
我在内容管理系统上工作,它有五个 antMatchers,如下所示: http.authorizeRequests() .antMatchers("/", "/*.html").per
我知道有这个问题的主题,但我所做的配置是正确的,我将它与它正常工作的项目进行了比较。我想“解除”JWT 安全性的/login 端点,但 AuthenticationFilter 仍然在到达/login
这是我配置 spring security 的方式,在 Controller 中我获得 ROLE_ANONYMOUS 作为权限。看起来安全性并没有拦截请求并检查 JWT。如何配置antmatcher.
编辑: 我进一步深入研究了问题,发现即使使用单一配置,问题仍然存在。如果我使用单一配置并保留 http.antMatcher("/api/test/**") 网址不安全。删除 antMatcher 和
我想在 .antmatchers.access(): 中使用 AuthoritiesConstants.java 中的一些常量: .antMatchers("/first/**").access("h
编辑: 我进一步深入研究了问题,发现即使使用单一配置,问题仍然存在。如果我使用单一配置并保留 http.antMatcher("/api/test/**") 网址不安全。删除 antMatcher 和
我定义了一个自定义过滤器,我在 BasicAutenticationFilter 之后添加... 问题是,当我 ping 我的微服务时(在这种情况下通过 Rancher 的健康检查)它总是进入过滤器,
我试图忽略身份验证中的 url 我尝试了多种不同的模式,但 java 似乎无法识别它们。我的配置如下所示: @Override public void configure(WebSecurit
Spring security oauth 实现中有一个常见的做法是使用以下行来保护 oauth 端点: .requestMatchers().antMatchers("/login", "/oaut
我使用正确的凭据登录为“CHILD”,因此它与“USER”角色不同。当我将带有 token 的 get 请求发送到 http://localhost:8081/iam/accounts/users 时
我是一名优秀的程序员,十分优秀!