springsecurity中anonymous_学习笔记38-Spring Security

*概念概括:Spring Security 是一个高度自定义的 安全框架。利用 Spring IoC/DI和 AOP 功能,为系统提供了声明式安全访问控制功能,减少了为系统安全而编写大量重复代码的工作。使用 Spring Secruity 的原因有很多,但大部分都是发现了 javaEE的 Servlet 规范或 EJB 规范中的安全功能缺乏典型企业用场景。同时认识到他们在 WAR 或 EAR 级别无法移植。因此如果你更换服务器环境,还有大量工作去重新配置你的应用程序。使用 Spring Security解决了这些问题,也为你提供许多其他有用的、可定制的安全功能。正如你可能知道的两个应用程序的两个主要区域是“ 认证”和“ 授权”(或者访问控制)。这两点也是 Spring Security 重要核心功能。“认证”,是建立一个他声明的主体的过程(一个“主体”一般是指用户,设备或一些可以在你的应用程序中执行动作的其他系统),通俗点说就是系统认为用户是否能登录。“授权”指确定一个主体是否允许在你的应用程序执行一个动作的过程。通俗点讲就是系统判断用户是否有权限去做某些事情。

历史:Spring Security 以“The Acegi Secutity System for Spring” 的名字始于 2003 年年底。其前身为 acegi 项目。起因是 Spring 开发者邮件列表中一个问题,有人提问是否考虑提供一个基于 Spring 的安全实现。限制于时间问题,开发出了一个简单的安全实现,但是并没有深入研究。几周后,Spring 社区中其他成员同样询问了安全问题,代码提供给了这些人。2004 年 1 月份已经有 20 人左右使用这个项目。随着更多人的加入,在 2004 年 3 月左右在 sourceforge 中建立了一个项目。在最开始并没有认证模块,所有的认证功能都是依赖容器完成的,而 acegi 则注重授权。但是随着更多人的使用,基于容器的认证就显现出了不足。acegi 中也加入了认证功能。大约 1 年后 acegi 成为 Spring子项目。在 2006 年 5 月发布了 acegi 1.0.0 版本。2007 年底 acegi 更名为Spring Security。

入门案例,创建项目,添加web和security的启动器,编写controller

springsecurity中anonymous_学习笔记38-Spring Security_第1张图片

启动访问login.html,弹出登录框:

springsecurity中anonymous_学习笔记38-Spring Security_第2张图片

默认用户名为user,密码在控制台输出:

springsecurity中anonymous_学习笔记38-Spring Security_第3张图片

登录可正常访问静态资源。

自定义用户名和密码:登录接口需要实现UserDetailsService接口

9c9fae3407c7e857c8efebabad257262.png

返回值UserDetails接口:

springsecurity中anonymous_学习笔记38-Spring Security_第4张图片

使用时,使用该接口的User实现类

fd546b3a9f9100431f9317e84dfc2727.png

该类中的一些属性

springsecurity中anonymous_学习笔记38-Spring Security_第5张图片

此处的用户名应该是客户端传递过来的用户名。而密码应该是从数据库中查询出来的密码。Spring Security 会根据 User 中的 password和客户端传递过来的 password 进行比较。如果相同则表示认证通过,如果不相同表示认证失败。

--authorities 里面的权限对于后面学习授权是很有必要的,包含的所有内容为此用户具有的权限,如有里面没有包含某个权限,而在做某个事情时必须包含某个权限则会出现 403。通常都是通过AuthorityUtils.commaSeparatedStringToAuthorityList(“”) 来创建authorities 集合对象的。参数时一个字符串,多个权限使用逗号分隔。

页面上传过来的username默认name属性必须要为username即name="username"

PasswordEncoder

你可能感兴趣的:(springsecurity中anonymous_学习笔记38-Spring Security)