Java Spring安全中Web忽略和Http允许的区别?
这两种方法有什么区别Java Spring安全中Web忽略和Http允许的区别?,java,spring,spring-boot,spring-mvc,spring-security,Java,Spring,Spring Boot,Spring Mvc,Spring Security,这两种方法有什么区别 @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().antMatchers("/api/**").permitAll(); } @Override public void configure(WebSecurity web) { web.ignoring().antMatchers("/api/**"); }
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/api/**").permitAll();
}
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/api/**");
}
在一个spring安全配置类中,当我使用HttpSecurity时,它仍然给我403 forbidden,但当我使用WebSecurity时,它通过了罚款?为什么呢?我觉得我几乎无法通过过滤器控制什么是允许的,什么是需要授权的。我建议您浏览一下这篇文章:代码中两种方法的区别是:
- 允许为HTTP请求配置基于web的安全性。在此级别,您将声明身份验证规则
- 允许配置对所有web安全性具有全局影响的内容,例如设置调试模式或使用的实现启用进一步的防火墙配置,或如代码所示忽略资源
- 这将启用并确保身份验证机制,例如基于LDAP的身份验证或基于JDBC的身份验证
- [flow 1]想象一座大办公楼,一楼有一个主接待处。一楼的接待处可以让你进入大楼,如果你想去公司,比如说B他们会带你去那里,但他们不能让你进入任何公司的办公室,因为他们是诚实的,每个办公室都有自己的接待处,当你来到B办公室接待处时,你需要在那里进行身份验证(只有客人、想看看他们办公室的匿名人士、员工/用户、管理员等),只有他们允许你进入任何一位父亲,这才取决于他们
- [flow 2]再想象一下,在同一座大办公楼里有餐厅/商店/厕所,当你来到一楼的主接待处,问他们餐厅在哪里时,他们会带你去那里,你不应该在这里进行身份验证,他们不知道你是谁,他们也不应该:
web.ignering().antMatchers(“/restaurant/**”;
- [flow 3]想象一下,在同一座大办公楼里,有一家公司决定在他们的楼层(一个房间,而不是整个办公室)开设画廊
- 他们问一楼的总接待处:“如果有人来看我们的画廊,就让他们进去吧,不需要我们接待处的认证”
web.ignoreing().antMatchers(“/C/gallery/**”);
- 此外,他们还可以通过其他方式处理流程1,当有人来到他们的接待处说他想看他们的画廊时,他们只会让他们进去,而无需验证
http.authorizeRequests().antMatchers(“/C/gallery/**”).permitAll();
的流程中,涉及到许多步骤/人/(案例中的过滤器http
)-速度稍慢,不需要静态资源Spring Security
一楼的主接待处it- - 他们问一楼的总接待处:“如果有人来看我们的画廊,就让他们进去吧,不需要我们接待处的认证”
- 这是一个有点抽象的问题,有点抽象的答案
WebSecurity
它是整个应用程序/大楼中唯一的一个
任何公司的接收都是websecurityConfigureAdapter
(每个websecurityConfigureAdapter
只有一个HttpSecurity
)您可以拥有任意多个,每个都可能有完全分离的身份验证流、安全要求等,但所有这些都可以要求WebSecurity
让任何人在没有任何身份验证的情况下访问某些资源。WebSecurity
甚至不知道如何对用户进行身份验证-没有such选项
总结一下您的问题,这两种方法应该具有相同的效果,如果不是,这意味着
WebSecurityConfigurerAdapter
具有一些额外的配置(默认情况下是e.x.crsf等)默认情况下,异常TranslationFilter
会捕获安全异常并返回适当的状态(401403)。为了给您提供更好的答案,您应该提供更多详细信息。仅使用显示的配置创建新项目,禁用http.csrf().disable()
为什么permitAll()不删除匹配端点上的所有身份验证需要?如果我有一个端点,可以说/api/我希望访问的国家/地区,而不需要任何筛选(身份验证/授权)。为什么permitAll()不工作?我不得不求助于忽略。嘿,我正在与Spring Security进行斗争,你的回答真的很有帮助。虽然我还没有解决我的问题,但它帮助我更多地理解了Spring Security的“流程”“。你有一些链接让我可以阅读更多关于这个的内容吗?”?每一个答案都假设了问题的背景,但我需要一个关于如何配置WebSecurity和HttpSecurity以及它们如何协同工作的概述。非常感谢:)嘿,没有好的源代码:(我自己检查了SpringSecurity中的所有代码。我希望这会有所帮助