Spring Security
文章平均质量分 90
光阴似键
光阴似键.
展开
-
Spring Security教程
Spring Security教程Web系统中登录认证(Authentication)的核心就是凭证机制,无论是Session还是JWT,都是在用户成功登录时返回给用户一个凭证,后续用户访问接口需携带凭证来标明自己的身份。后端会对需要进行认证的接口进行安全判断,若凭证没问题则代表已登录就放行接口,若凭证有问题则直接拒绝请求。这个安全判断都是放在过滤器里统一处理的:登录认证是对用户的身份进行确认,权限授权(Authorization)是对用户能否访问某个资源进行确认,授权发生在认证之后。 这种通用逻辑都转载 2021-08-31 19:08:43 · 4062 阅读 · 9 评论 -
【Spring Security系列】跨域请求伪造的防护
CSRF的全称是(Cross Site Request Forgery),可译为跨域请求伪造,是一种利用用户带登录 态的cookie迚行安全操作的攻击方式。CSRF实际上并不难防,但常常被系统开发者忽略,从而埋下巨 大的安全隐患。1.CSRF的攻击过程为了试图说明CSRF的攻击过程,现在思考下面这个场景。假如有一个博客网站,为了激励用户写出高质量的博文,设定了一个文章被点赞就能奖励现金的 机制,于是有了一个可用于点赞的API,只需传入文章id即可:http://com.example.co原创 2020-07-16 13:20:25 · 571 阅读 · 0 评论 -
【Spring Security系列】跨域与CORS
跨域是一种浏览器同源安全策略,即浏览器单方面限制脚本的跨域访问。1.认识跨域很多人误认为资源跨域时无法请求,实际上,通常情况下请求是可以正常发起的(注意,部分浏 览器存在特例),后端也正常进行了处理,只是在返回时被浏览器拦截,导致响应内容不可使用。可 以论证这一点的著名案例就是CSRF跨站攻击。此外,我们平常所说的跨域实际上都是在讨论浏览器行为,包括各种WebView容器等(其中,以 XmlHttpRequest 的使用为主)。由于JavaScript 运行在浏览器之上,所以 Ajax的跨域成为原创 2020-07-16 11:15:00 · 953 阅读 · 0 评论 -
【Spring Security系列】Spring Security密码加密
密码安全是互联网安全的一个缩影,我们在享受互联网服务的同时,也应当对它投入更多的关注。 1.密码安全的重要性2011年12月,国内某开发者社区网站被黑客“拖库”,600多万个密码明文存储的用户账号被公开, 大量用户直接面临数据隐私泄露和数据安全的双重威胁。这次事件为我们敲响了警钟,一旦发生“拖库”,如何尽可能地减少用户的损失,在每一个系统中 都不应被忽略。从开发者的角度而言,可以落实在如何安全存储用户密码上。 ...原创 2020-07-02 14:08:15 · 2636 阅读 · 0 评论 -
【Spring Security系列】Spring Security整合Spring Session解决集群会话问题
Spring Security提供的会话并发控制是基于内存实现的,在集群部署时如果想要使用会话并发控制,则必须进行适配。 session共享,本质上就是存储容器的变动,但如何得到最优存取结构、如何准确清理过期会话,以及如何整合WebSocket等无法回避。Spring Session就是专门用于解决集群会话问题的,它不仅为集群会话提供了非常完善的支持,与Spring Security的整合也有专门的实现。 Spring Session支持多种类型的存储容器,包括Redis、MongoDB等。由于接下来的整合原创 2020-07-02 11:56:21 · 939 阅读 · 2 评论 -
【Spring Security系列】Spring Security集群会话的解决方案
解决集群会话的常见方案有三种: session保持 session复制 session共享 session保持也叫粘滞会话(Sticky Sessions),通常采用IP哈希负载策略将来自相同客户端的请求转发至相同的服务器上进行处理。session保持虽然避开了集群会话,但也存在一些缺陷。例如,某个营业部的网络使用同个IP出口,那么使用该营业部网络的所有员工实际的源IP其实是同一个,在IP哈希负载策略下,这些员工的请求都将被转发到相同的服务器上,存在一定程度的负载失衡。 sessio原创 2020-07-01 16:54:03 · 766 阅读 · 0 评论 -
【Spring Security系列】Spring Security集群会话的缺陷
会话通常保存在服务器内存中,客户端访问时根据自己的sessionId在内存中查找,这种方法虽然简单快捷,但缺点也很明显。从容量上来说,服务器内存有限,除了系统正常运行的消耗,留给session的空间不多,当访问量增大时,内存就会捉襟见肘。从稳定性上来说,session依赖于内存,而内存并非持久性存储容器,就算服务器本身是可靠的,但当部署在上面的服务停止或重启时,也会导致所有会话状态丢失。当然,这两个缺点还只是体验性缺陷,并不足以影响可用性,在单机部署时为 了节省精力忽略这两个问题也是可以的。但当我们的系统采原创 2020-07-01 16:46:05 · 333 阅读 · 0 评论 -
【Spring Security系列】Spring Security会话管理
只需在两个浏览器中用同一个账号登录就会发现,到目前为止,系统尚未有任何会话并发限制。一个账户能多处同时登录可不是一个好的策略。事实上,Spring Security已经为我们提供了完善的会话管理功能,包括会话固定攻击、会话超时检测以及会话并发控制。1.什么是会话会话(session)就是无状态的 HTTP 实现用户状态可维持的一种解决方案。HTTP 本身的无状态使得用户在与服务器的交互过程中,每个请求之间都没有关联性。这意味着用户的访问没有身份记录,站点也无法为用户提供个性化的服务。session的原创 2020-07-01 15:23:58 · 1353 阅读 · 1 评论 -
【Spring Security系列】Spring Security注销登录
认证系统往往都带有注销登录功能,Spring Security也提供了这方面的支持。事实上,从我们编写配置类继承WebSecurityConfigurerAdapter的那一刻起,Spring Security就已经为我们的系统埋入了注销的逻辑。protected final HttpSecurity getHttp() throws Exception { if (http != null) { return http; } AuthenticationEventPublishe原创 2020-06-30 17:32:09 · 450 阅读 · 0 评论 -
【Spring Security系列】Spring Security自动登录
1.为什么需要自动登录 当我们在某个网站上注册账号时,网站会对我们设置的登录密码提出要求。例如,有的网站要求使用固定位数的纯数字密码,有的网站则强制要求用户使用英文+数字组合成的密码,甚至要求加一些特殊符号来组成密码。总体而言,设定一个密码并不困难,真正的困难总是在下次登录时才会遇到。要么想不出网站要求的密码格式是什么,要么还原不了设置密码时的思维状态。总之,在几次尝试登录失败之后,大部分人会选择找回密码,从而再次陷入如何设置密码的循环里。为了尽可能减少用户重新登录的频率,在系统开发之初就需要考虑加入可原创 2020-06-30 15:48:52 · 906 阅读 · 0 评论 -
【Spring Security系列】Spring Security使用自定义认证实现图形验证码
前面使用过滤器的方式实现了带图形验证码的验证功能,属于Servlet层面,简单、易理解。其实,Spring Security还提供了一种更优雅的实现图形验证码的方式,即自定义认证。 1.认识AuthenticationProvider 在学习Spring Security的自定义认证之前,有必要了解Spring Security是如何灵活集成多种认证技术的。我们所面对的系统中的用户,在Spring Security中被称为主体(principal)。主体包含了所有能够经过验证而获得系统访问权限的原创 2020-06-30 11:46:14 · 485 阅读 · 0 评论 -
【Spring Security系列】Spring Security使用过滤器实现图形验证码
在验证用户名和密码之前,引入辅助验证可有效防范暴力试错,图形验证码就是简单且行有效的一种辅助验证方式。下面将使用过滤器和自定义认证两种方式实现图形验证码功能。 验证码(CAPTCHA)的全称是Completely Automated Public Turing test to tell Computers and Humans Apart,翻译过来就是“全自动区分计算机和人类的图灵测试”。通俗地讲,验证码就是为了防止恶意用户暴力重试而设置的。不管是用户注册、用户登录,还是论坛发帖,如...原创 2020-06-30 10:22:47 · 1321 阅读 · 1 评论 -
【Spring Security系列】Spring Security自定义数据库模型的认证和授权
让Spring Security适应系统,而非让系统适应Spring Security,是Spring Security框架开发者和使用者的共识。下面我们将使用自定义数据库模型接入Spring Security,数据库依然是MySQL,持久层框架则选用MyBatis(倾向于使用JPA的读者也可以自行选型,它们在Spring Security部分的实践是一样的)。旁枝末节的知识会点到即止,我们重点介绍Spring Security相关的内容,所以期望读者自行阅读相关资料,也可以选择暂时略过在前面的博客原创 2020-06-29 16:45:17 · 392 阅读 · 1 评论 -
【Spring Security系列】Spring Security基于默认数据库模型的认证与授权
除了InMemoryUserDetailsManager,Spring Security还提供另一个UserDetailsService实现类: JdbcUserDetailsManager。 JdbcUserDetailsManager帮助我们以JDBC的方式对接数据库和Spring Security,它设定了一个默认的数据库模型,只要遵从这个模型,在简便性上,JdbcUserDetailsManager甚至可以媲美InMemoryUserDetailsManager。1.配置数据库引入JDBC和原创 2020-06-24 17:34:38 · 542 阅读 · 0 评论 -
【Spring Security系列】Spring Security 基于内存的多用户支持
到目前为止,我们仍然只有一个可登录的用户,怎样引入多用户呢?非常简单,我们只需实现一个自定义的UserDetailsService即可。 @Beanpublic UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); manager.createUser(User.withUsername("user").password("1原创 2020-06-24 14:41:02 · 634 阅读 · 0 评论 -
【Spring Security系列】Spring Security简单授权
在前面的博客中,我们使用了Spring Security默认的安全机制:仅有一个用户,仅有一种角色。在实际开发中,这自然是无法满足需求的。本篇将更加深入地对Spring Security进行配置,且初步使用授权机制。首先,在controller包下新建三个控制器@RestController@RequestMapping("/admin/api")public class AdminController { @GetMapping("/hello") public St...原创 2020-06-24 14:12:16 · 202 阅读 · 0 评论 -
【Spring Security系列】Spring Security 自定义表单登录页
虽然自动生成的表单登录页可以方便、快速地启动,但是大多数应用程序更希望提供自己的表单登录页,此时就需要覆写configure方法。 1.覆写configure方法,添加自定义配置@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exce原创 2020-06-24 12:00:46 · 648 阅读 · 0 评论 -
【Spring Security系列】Spring Security默认表单登录
上篇博客中,我们初步引入了Spring Security,并使用其默认生效的HTTP基本认证来保护URL资源,此处我们使用表单认证来保护URL资源。首先,新建一个config包用于存放通用配置;然后,新建一个WebSecurityConfig类,使其继承WebSecurityConfigurerAdapter,WebSecurityConfigurerAdapter 类是个适配器, 在配置的时候,需要我们自己写个配置类去继承他,然后编写自己所需要的配置。@EnableWebSecuritypub原创 2020-06-24 10:46:41 · 1517 阅读 · 0 评论 -
【Spring Security系列】Spring Security Hello World
1.创建spring boot项目,maven中引入spring security依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>查看spring-boot-starter-security依赖,可..原创 2020-06-23 16:58:34 · 154 阅读 · 0 评论 -
【Spring Security系列】Spring Security 简介
Spring Security简介官网:https://spring.io/projects/spring-security中文文档:https://www.springcloud.cc/spring-security.htmlSpring Security 的前身是 Acegi Security,在被收纳为Spring子项目后正式更名为Spring Security。 在笔者成书时,Spring Security已经升级到5.1.3.RELEASE版...原创 2020-06-23 16:28:09 · 1280 阅读 · 0 评论 -
Spring Security自定义表单登录页
(1)初步配置自定义表单登录页首先覆盖config方法import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.EnableWebSecur...原创 2019-11-20 20:47:16 · 909 阅读 · 1 评论 -
spring security默认表单认证
1. 添加配置类import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;import org.sprin...原创 2019-11-20 20:12:55 · 260 阅读 · 0 评论 -
创建一个简单的 Spring Security 项目
1.新建spring boot项目2. 选择依赖项Spring Initializr 允许我们提前选定一些常用的项目依赖,此处我们选择 Security 作为构建 Spring Security 项目的最小依赖,选择 Web 作为 Spring Boot 构建 Web 应用的核心依赖。打开 pom.xml 文件,看看 Spring Initializr 引入了...原创 2019-11-20 19:46:13 · 440 阅读 · 0 评论