修改
我进一步深入研究了问题,即使是单一配置,问题依然存在。如果我使用单一配置并保持
typename
网址不安全。 删除antMatcher和antMatchers会立即保护网址。 即使我使用:
http.antMatcher("/api/test/**")
然后只有Spring安全保护网址。为什么antMatcher不起作用?
(更新了标题以包含实际问题。)
原帖:
我已经提到了以下stackoverflow问题:
和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,则所有网址都会受到保护。
答案 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