Spring Security安全认证服务框架的简单应用(上)
Spring Security有两个关键点:认证和授权。
“认证”,是为用户建立一个他所声明的主体。主题一般式指用户,设备或可以在你系 统中执行动作的其他系统。
通俗地讲,就是你要查找的数据库有没有的问题。(例如有无某个user)
“授权”指的是一个用户能否在你的应用中执行某个操作,在到达授权判断之前,身份的主题已经由 身份验证过程建立了。
简单地说,就是有没那个权限做某个操作。(例如该user是否有ROLE_ADMIN或者ROLE_USER权限)
下面直接来说这么用吧。
首先,maven依赖是不可少的
其次,作为Spring家族的一员,SpringSecurity在SSM里的应用有着天然的先天优势,我们要做的第二步,就是在web.xml文件里添加SpringSecurity的相关配置,如下
1,在spring整合springmvc时,需要配置监听机制,指定配置文件路径,要求在服务器启动时就完成加载,springsecurity同样如此
2.还需配置spring-security过滤链,且尤其需要注意的是,springSecurityFilterChain不能改动,与此同时,也可释放指定静态资源
此外,Spring-Security自身配置文件,SpringSecurity.xml,它分如下几个部分,各自完成不同的功能。
A:配置不过滤的资源
B:自动生成登录表单样式,当我们访问index.html页面时发现会弹出登录窗口,可能你会奇怪,我们没有建立下面的登录页面,为什么SpringSecurity会跳到上面的登录页面呢?这是我们设置http的auto-confifig=”true”时Spring Security自动为我们生成的。
C:比较关键的一个拦截配置,pattern="/**"表示拦截所有请求,access="ROLE_ADMIN,ROLE_USER",表示拥有权限才可以通过
D:表示自定义登录页面配置,login-page是登录页面,login-processing-url登录路径
E:跨域请求,即跨服务器请求,默认是开启的,这里选关闭
F:比较简单,登出、注销功能 logout-success-url="/login.jsp"
G:权限认证管理器,以及加密机制,需要配合业务层来理解
在业务层,servcie接口首先继承UserDetailService接口,复写loadUserByUsername方法
public interface UserServiceInterface extends UserDetailsService {
UserDetails loadUserByUsername(String username)throws UsernameNotFoundException;
}
UserDetailService是什么玩意?来欣赏一下源码,其实第一句话就说了个大概,就是根据用户名来定位用户的,它提供了loadUserByUsername方法,返回一个UserDetails,而UserDetails的实现类User,可以将持久层根据username查到的useinfo封装进去,返回一个完整的User进行权限认证。
UserDetailsService:
UserDetails:
帮助理解来看看业务层的具体实现:
SimpleGrantedAuthority是GrantedAuthority接口的实现类,它实现了后者的getAuthority()方法,