Spring Security内部工作原理
创始人
2024-01-30 22:57:47
0

定义

Spring 安全性是 Spring提供的一个框架,有助于自定义访问和身份验证过程。它在保护应用程序方面起着非常关键的作用。

Spring 安全性,主要侧重于身份验证和授权,为 Java 应用程序提供所有好处。它非常有用,并提供了一种在实际项目中应用的简单方法。并且,允许在实际项目中进行自定义修改。

优点/特点

  • 全面而广泛地支持身份验证和授权过程。
  • 防止跨站点伪造、会话固定、点击劫持等。
  • 集成 Servlet API。
  • 可以选择提供与Spring Web MVC的集成。

工作流:如何验证和管理用户的凭据

此工作流表示用户凭据一旦由用户提供的工作周期。它显示了如何验证用户的凭据并在 Spring 安全性中围绕。

图:Spring 安全性中用户凭据的旅程

身份验证筛选器

身份验证筛选器是拦截请求的筛选器。一旦它拦截了这些请求,它就会尝试转换身份验证详细信息。因此,我们将从用户那里接收详细信息(如用户名和密码)到身份验证对象中。

认证对象:它是负责验证用户凭据的基本对象。

认证管理器:

身份验证管理器是它将识别请求必须转到的相应身份验证提供程序的地方。而且,用户不会遵循许多过程来验证凭据,因为他/她可以使用数据库来验证用户凭据。或者他/她可以使用LDAP,或者他/她可以使用系统可能具有身份验证管理器的可能提供程序。

它负责确定最合适的身份验证提供程序,并在身份验证提供程序收到请求后发送用户的请求。

身份验证提供程序

身份验证提供程序在其中实现安全验证的所有逻辑。Spring 安全性提供了一些功能来自定义请求(根据选择对端点进行身份验证):

  • Pr为端点提供自定义身份验证:
@Override
protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests((requests) -> {((AuthorizedUrl)requests.antMatchers("/endpoint1")).authenticated();((AuthorizedUrl)requests.antMatchers("/endpoint2")).authenticated();((AuthorizedUrl)requests.antMatchers("/endpoint3")).authenticated();((AuthorizedUrl)requests.antMatchers("/endpoint4")).authenticated();((AuthorizedUrl)requests.antMatchers("/endpoint5")).permitAll();((AuthorizedUrl)requests.antMatchers("/endpoint6")).permitAll();});http.formLogin();http.httpBasic();
}
  • Pr对所有端点进行身份验证:
@Override
protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests((requests) -> {((AuthorizedUrl)requests.antMatchers("/endpoint1")).authenticated();((AuthorizedUrl)requests.antMatchers("/endpoint2")).authenticated();((AuthorizedUrl)requests.antMatchers("/endpoint3")).authenticated();((AuthorizedUrl)requests.antMatchers("/endpoint4")).authenticated();((AuthorizedUrl)requests.antMatchers("/endpoint5")).permitAll();((AuthorizedUrl)requests.antMatchers("/endpoint6")).permitAll();});http.formLogin();http.httpBasic();http.authorizeRequests((requests) -> {((AuthorizedUrl)requests.anyRequest()).authenticated();});http.formLogin();http.httpBasic();
}
  • 取消对所有端点进行身份验证:
@Override
protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests((requests) -> {((AuthorizedUrl)requests.antMatchers("/endpoint1")).authenticated();((AuthorizedUrl)requests.antMatchers("/endpoint2")).authenticated();((AuthorizedUrl)requests.antMatchers("/endpoint3")).authenticated();((AuthorizedUrl)requests.antMatchers("/endpoint4")).authenticated();((AuthorizedUrl)requests.antMatchers("/endpoint5")).permitAll();((AuthorizedUrl)requests.antMatchers("/endpoint6")).permitAll();});http.formLogin();http.httpBasic();http.authorizeRequests((requests) -> {((AuthorizedUrl)requests.anyRequest()).permitAll();});http.formLogin();http.httpBasic();
}

它在内部使用两个接口:

用户详细信息服务(接口):这是一个保存用户架构的接口,并显示用户详细信息的外观,如用户名、密码、MFA 等。

密码编码器(接口):这是一个接口,有助于在评估安全性时加密、编码和解密用户的密码。并且,无论提供的输入(身份验证对象)是否有效,流都会返回到身份验证管理器

身份验证对象从身份验证筛选器内部发送,无论用户是否是有效的经过身份验证的用户,以及与之关联的角色和权限是什么。

在身份验证内部,身份验证筛选器提供的对象从身份验证提供程序和身份验证管理器填充。

之后,身份验证筛选器身份验证对象传递给安全性,以保存将存储在容器中的用户详细信息。

最后,生成令牌,应用程序将保存令牌,该令牌将存储在安全上下文接口中。

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {auth.inMemoryAuthentication().withUser("admin").password("admin").authorities("admin").and().withUser("user").password("user").authorities("read").and().passwordEncoder(NoOpPasswordEncoder.getInstance());
}

安全上下文

安全上下文是一个用户可以在对自己进行身份验证后查看他/她的数据的地方,并确定他/她是否是有效用户。用户的这些信息将自动存储在安全上下文中并响应浏览器。

第二次,尝试传递相同的安全信息和相同的流将不会进一步执行,因为用户的凭据已经过验证。

工作流:让我们了解 Spring 安全性中用户的管理周期

此工作流表示用户的管理周期。它显示了用户名,密码,角色,权限等用户信息如何在Spring Security中存储和管理。

准备好通过面向未来的新兴技术获得竞争优势了吗?

让我们建立合作伙伴关系

图:如何在 Spring 安全性中彻底管理用户

用户详细信息(界面)

用户详细信息界面是帮助识别用户的用户名、密码、角色和权限的界面。它还负责检查用户帐户的有效性/到期日。它是一个合约或模式或蓝图,由 spring 安全框架维护。并且还表示尝试访问我们应用程序的实际用户。

如果用户很好用 spring 框架本身提供的默认实现,可以继续使用 User(类),它实现了这个用户详细信息接口,以及如何实现这些抽象方法的所有实现。

用户详细信息管理器(界面)

User Details Manager 扩展了UserDetailsService(实现类),这意味着此接口中也将存在单个抽象方法。因此,那些想要实现此用户详细信息管理器的人必须为所有这些方法提供具体的实现。

结果,创建一个用户,正如您所期望的那样,此方法的参数是用户详细信息。

内存中用户详细信息管理器(类)

内存用户详细信息管理器是一个实现类,它有助于维护所有用户,这些用户可以从内存本身加载用户详细信息、身份验证详细信息、权限以及所有内容,内存本身将存储和设置Spring上下文。

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {InMemoryUserDetailsManager userDetailsService = new InMemoryUserDetailsManager();UserDetails userOne = User.withUsername("admin").password("admin").authorities("admin").build();UserDetails userTwo = User.withUsername("user").password("user").authorities("read").build();userDetailsService.createUser(userOne);userDetailsService.createUser(userTwo);auth.userDetailsService(userDetailsService);
}

JDBC 用户详细信息管理器(类)

JDBC 用户详细信息管理器是 Spring Security 提供的最著名的实现。这是生产级就绪的实现,这意味着如果您提供MySQL,Oracle或任何数据库的数据源详细信息,则此JDBC用户详细信息管理器具有与加载用户详细信息,维护它们,更改密码相关的所有代码。

LDAP 用户详细信息管理器(类)

LDAP 用户详细信息管理器是利用 LDAP 服务器进行授权和身份验证的实现类。

用户是 Spring 安全性提供的默认实现,它发生在用户详细信息接口架构中。

参考

有关安全安全的详细信息,请单击此处。

相关内容

热门资讯

财经聚焦|破解科技企业融资痛点...   “科技之花”绽放,离不开金融活水精心浇灌。如何进一步提升金融服务质效、破解科技企业融资难题?  ...
【理响中国】怎样健全扩大内需的...   扩大内需,既需要宏观政策积极有为,也需要形成长效机制。在《求是》杂志新近刊发的习近平总书记重要文...
冬至,福至!   长夜漫漫,寒意正浓  梅枝探雪,灯火向荣  水饺是冬夜弯曲的银月  汤圆是心中思念的玉盘  羊肉...
多地育儿补贴已到账 还没申领的...   临近年末  有人惊喜地发现  银行账户上多出了一笔钱  原来是育儿补贴到账了  2025年11月...
西藏拉鲁湿地获“世界海拔最高的...   12月20日,拉鲁湿地国家级自然保护区通过世界纪录认证(WRCA)获“世界海拔最高的城市天然湿地...
包银高铁将于12月23日全线开...   人民网呼和浩特12月20日电 (富丽娟、实习生刘迎雪)包头至银川高铁包头至惠农段(以下简称包银高...
官方通报“南极磷虾油”事件:已...   中新网12月20日电 成都市新都区市场监督管理局20日在其官方微信公众号发布情况通报称,针对近日...
2026年全国硕士研究生招生考...   央视网消息:2026年全国硕士研究生招生考试突出强化制度约束,进一步细化流程标准。  2026年...
2026年全国硕士研究生招生考...   央视网消息:12月20日,多所高校和考点多措并举,为考生营造安全、便利、温暖的备考和考试环境。
重庆发布国内首块L3级自动驾驶...   20日,国内首块L3级自动驾驶专用正式号牌“渝AD0001Z”在重庆诞生,由重庆市公安局交通管理...