- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 java spring boot 项目,我正在尝试为使用 JWT 的用户身份验证设置 spring 安全性,我正在关注的教程(以及我在互联网上找到的许多教程和项目)会谈关于两个部分 - 身份验证和授权。
在大多数教程中有两个过滤器类,一个处理身份验证,另一个处理授权!(我发现有些只有一个扩展 OncePerRequestFilter
类的类)。
在那些有两个过滤器类的项目中,身份验证过滤器类扩展 UsernamePasswordAuthenticationFilter
类。授权类扩展 BasicAuthenticationFilter
类。
有没有一种方法我只能在我的项目中使用身份验证部分,或者我应该使用这两个类来设置 spring security 中的用户身份验证?
任何解释将不胜感激。
最佳答案
Is there a way that I can only use authentication part in my project or should I use both classes to set up user authentication in spring security?
不,没有仅身份验证部分的概念,您对 spring security 有错误的认识,spring security 就是通过使用默认配置或通过实现您的自定义配置进行配置。 (AuthenticationFilters
、AuthenticationProviders
、AuthenticationToken
等)
Spring 安全性在代理过滤器或 spring 托管 beans 方面在您的应用程序之前放置了一个WALL(HttpFireWall)。如果在身份验证和授权部分都成功,则请求可以到达您的应用程序。
它将经历
在这一步Authentication
对象将被创建。从 auth 对象你可以得到
UserDetails
或AuthenticatedPrincipal
或Principal
)AuthenticationManager
相关的任何内容)FilterSecurityInterceptor
几乎排在过滤器链的最后,它从 SecurityContext
获取 Authentication
对象并获得授权权限列表(授予角色) 并决定是否允许此请求到达所请求的资源,通过与 HttpSecurityConfiguration
中配置的允许的 AntMatchers 进行匹配来做出决定。
考虑异常 401-UnAuthorized 和 403-Forbidden。这些决定将在过滤器链的最后完成
401-UnAuthorized:未经身份验证的用户试图访问安全资源。
403-Forbidden:经过身份验证的用户试图访问受限资源。
未经身份验证的用户将被允许访问不受限制的资源,他不会收到未经授权的错误,但它由 AnonymousAuthenticationFilter
处理,它为未经身份验证的用户设置权限 ROLE_ANONYMOUS
。
注意事项
下面给出过滤器顺序。在哪里,
身份验证是@order-4
授权为@Order-9(Last)
只是给出一些关于 spring 安全过滤器的概念From Doc
Spring Security has several areas where patterns you have defined are tested against incoming requests in order to decide how the request should be handled. This occurs when theFilterChainProxy
decides which filter chain a request should be passed through and also when theFilterSecurityInterceptor
decides which security constraints apply to a request. It's important to understand what the mechanism is and what URL value is used when testing against the patterns that you define.
Filter Ordering
The order that filters are defined in the chain is very important. Irrespective of which filters you are actually using, the order should be as follows:
1.ChannelProcessingFilter
, because it might need to redirect to a different protocol
2.SecurityContextPersistenceFilter
, so a SecurityContext can be set up in the SecurityContextHolder at the beginning of a web request, and any changes to the SecurityContext can be copied to theHttpSession
when the web request ends (ready for use with the next web request)
3.ConcurrentSessionFilter
, because it uses theSecurityContextHolder
functionality but needs to update theSessionRegistry
to reflect ongoing requests from the principal
4. Authentication processing mechanisms -UsernamePasswordAuthenticationFilter
, CasAuthenticationFilter, BasicAuthenticationFilter etc - so that the SecurityContextHolder can be modified to contain a valid Authentication request token
5. TheSecurityContextHolderAwareRequestFilter
, if you are using it to install a Spring Security awareHttpServletRequestWrapper
into your servlet container
6.RememberMeAuthenticationFilter
, so that if no earlier authentication processing mechanism updated theSecurityContextHolder
, and the request presents a cookie that enables remember-me services to take place, a suitable remembered Authentication object will be put there
7.AnonymousAuthenticationFilter
, so that if no earlier authentication processing mechanism updated theSecurityContextHolder
, an anonymous Authentication object will be put there
8.ExceptionTranslationFilter
, to catch any Spring Security exceptions so that either an HTTP error response can be returned or an appropriateAuthenticationEntryPoint
can be launched
9.FilterSecurityInterceptor
, to protect web URIs and raise exceptions when access is denied
最后,如果您是 Spring Security 的新手。我的建议是尝试最多的示例并花更多时间在调试日志上并尝试理解流程。
关于java - Spring Security上下文中的身份验证和授权有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58350894/
请帮助我的建议。 我需要通过 xml 文件中的某个变量在我的应用程序上禁用/启用 spring 安全性。 我的 spring-security.xml 文件
我做了很多研究,对我来说一切看起来都是正确的......但我无法让它发挥作用!有人有什么想法吗? 无论我做什么,相关映射仍然对任何人公开(匿名或登录,无论他们具有什么角色)。 理想情况下,我希望所有请
我们正在考虑为我们网站的一部分启用 SSL,但某些页面包含来自第三方供应商(如 Google AdSense)的广告。 我认为这会给我们的用户带来一个恼人的问题,因为他们在查看带有广告的页面时会看到类
我正在开发一个休息服务,它将通过浏览器提供 浏览器单页应用程序和移动应用程序。目前我的服务正在运行 根本没有 Spring 。 oauth2 客户端是在过滤器内部实现的,所以可以说是“手动”。 我正在
我正在为我公司的网站添加 Content-Security-Policy-Report-Only 标题。在我研究它时,我发现一些页面已经设置了 Content-Security-Policy head
在 XML 配置中,我可以使用 security 命名空间来启用对安全性的支持,例如: 我尝试使用没有 XML 的 Spring,只有 @Configuration 类。与上述 XM
我正在使用 Spring Security 3.0.2,但找不到从数据库加载匿名用户角色的方法(我有动态角色,可以将角色分配给每个人)。 我尝试使用自定义的anonymousAuthenticatio
我有那个代码。但是当我在浏览器中进入 app_dev.php/login浏览器说:该页面进行了太多重定向 安全.yml安全: 编码器: Symfony\Component\Security\Core\
我正在使用SSH Secure Shell客户端,这是一个连接服务器的好工具。 但是,我想知道是否可以记录通过SSH Secure Shell客户端运行的程序中所有即将出现的消息。例如:./ test
我有那个代码。但是当我在浏览器中进入 app_dev.php/login浏览器说:该页面进行了太多重定向 安全.yml安全: 编码器: Symfony\Component\Security\Core\
如何为表单例份验证提供程序设置 success_handler(和 failure_handler)? Silex 使用此配置忽略我: register(new Silex\Provider\Secu
新手问题...我已成功实现自定义处理程序和服务(自定义用户详细信息服务、身份验证成功、身份验证失败)并且一切正常。我现在还实现了如果 3 次并发身份验证失败将锁定帐户(一定时间)的功能。 我现在继续处
我正在使用 Spring security java 配置,我想知道一种实现多个 url 注销的方法。即 logout().logoutRequestMatcher(new AntPathReques
我正在为我的 SP 使用 Spring Security SAML 扩展。用户通过 IDP 身份验证后,SP 使用某种方法允许后续调用不必通过 IDP 重新进行身份验证。这是如何在 Spring Se
spring security 有没有办法防止下面的最后一点?我正在使用 3.0.5 - 用户登录我的网站 - 用户转到网站中的任何页面并单击注销 -注销链接使用户 session 无效并将它们发送到
要么我迟到了,要么我做错了什么。我正在使用 Visual Studio 2013,但是我试图使用 Membership 类,using System.Web.Security;我的程序集中不存在命名空
我有一个具有依赖性的oauth2客户端spring-boot应用程序: - Spring 靴1.2.0.RC1 -spring-security-oauth2 2.0.4.RELEASE - Spri
我想在控制台应用程序中生成 HashPasswordForStoringInConfigFile。 它是在 Web 应用程序中使用以下类完成的 System.Web.Security.FormsAut
我需要有多个 PRE_AUTH Spring 安全过滤器。特别是我需要使用 PRE_AUTH除了配置为 PRE_AUTH 的两个过滤器之外的过滤器在 Spring Security 3.0 的 SAM
我猜这里没有答案,但我想知道是否有办法创建这样的自定义注释: @Documented @Inherited @Retention(RetentionPolicy.RUNTIME) @Target({E
我是一名优秀的程序员,十分优秀!