Spring安全antMatcher不起作用

时间:2018-01-17 07:39:42

标签: java spring spring-security

修改

我进一步深入研究了问题,即使是单一配置,问题依然存在。如果我使用单一配置并保持

typename

网址不安全。 删除antMatcher和antMatchers会立即保护网址。 即使我使用:

http.antMatcher("/api/test/**")

然后只有Spring安全保护网址。为什么antMatcher不起作用?

(更新了标题以包含实际问题。)

原帖:

我已经提到了以下stackoverflow问题:

  1. Spring REST security - Secure different URLs differently

  2. Using multiple WebSecurityConfigurerAdapter with different AuthenticationProviders (basic auth for API and LDAP for web app)

  3. 和spring security doc:

    https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#multiple-httpsecurity

    但我无法配置多个http安全元素。 当我遵循官方的spring文档时,它适用于我的情况,因为第二个http安全元素是一个全能的事实,但只要我添加一个特定的URL,所有的URL都可以在没有任何身份验证的情况下访问。

    这是我的代码:

    http.httpBasic()
        .and()
        .authorizeRequests()
        .anyRequest()
        .authenticated();
    

    现在可以访问任何网址。如果我从第二个配置中删除antMatcher,则所有网址都会受到保护。

1 个答案:

答案 0 :(得分:7)

模式不得包含上下文路径,请参阅AntPathRequestMatcher

  

匹配器将预定义的ant样式模式与strQry = `SELECT * from table WHERE Depot = ?` if HPhone != "" { strQry += ` AND HPhone = ?` } queryArgs := []interface{}{RouteAvailability.Depot} if HPhone != "" { queryArgs = append(queryArgs, "SUBSTRING("+HPhone+",1,3)"+"-"+"SUBSTRING("+HPhone+",4,3)"+"-"+"SUBSTRING("+HPhone+",7,4)") } 的URL(servletPath + pathInfo)进行比较。

HttpServletRequest.html#getServletPath

  

返回此请求调用servlet的URL的一部分。此路径以“/”字符开头,包括servlet名称或servlet的路径,但不包含任何额外的路径信息或查询字符串。与CGI变量SCRIPT_NAME的值相同。

HttpServletRequest.html#getContextPath

  

返回请求URI的一部分,指示请求的上下文。上下文路径始终位于请求URI中。路径以“/”字符开头,但不以“/”字符结尾。对于默认(根)上下文中的servlet,此方法返回“”。容器不会解码此字符串。

您修改后的简化代码:

HttpServletRequest