1.没有用框架时自己的实现思路
用户登陆后要把用户信息及角色权限信息都存储起来
通过aop给每个controller做拦截
通过反射的方式获取要访问的路径
通过用户信息取出权限
通过权限和路径进行匹配
将判断结果存储在request域中实现判断结果的传递
2.重要名词
认证:通过用户名和密码成功登陆系统后,让系统得到当前用户的角色身份。
授权:系统根据当前用户的角色,给其授予对应可以操作的权限资源。
3.三个对象
用户:主要包含用户名,密码和当前用户的角色信息,可实现认证操作。
角色:主要包含角色名称,角色描述和当前角色拥有的权限信息,可实现授权操作。
权限:权限也可以称为菜单,主要包含当前权限名称,url地址等信息,可实现动态展示菜单。
4.核心思想
Spring Security是spring采用AOP思想,基于servlet过滤器实现的安全框架。
5.认证过程
提供了业务层的一个UserDetailsService接口,在认证的过程中它会调用我们写的具体实现类,而实现方法中的业务代码就是从数据库中查询出用户名、密码、角色信息,然后将查询结果中的部分信息放到框架提供的UserDetails这个类当中去
6.remember功能
通过cookie保存加密信息发送到浏览器来作为下一次登陆的凭证
如果要考虑更好的保密性能按照官方要求在数据库中创建一个表
CREATE TABLE `persistent_logins` (
`username` varchar(64) NOT NULL,
`series` varchar(64) NOT NULL,
`token` varchar(64) NOT NULL,
`last_used` timestamp NOT NULL,
PRIMARY KEY (`series`)
) ENGI
7.注解的使用
<!--
开启权限控制注解支持
jsr250-annotations="enabled"表示支持jsr250-api的注解,需要jsr250-api的jar包
pre-post-annotations="enabled"表示支持spring表达式注解
secured-annotations="enabled"这才是SpringSecurity提供的注解
-->
<security:global-method-security jsr250-annotations="enabled"
pre-post-annotations="enabled"
secured-annotations="enabled"/>
这里注意父子容器的关系 注解标在controller层就在springmvc的配置
========================================================================
8.异常处理
8.1 处理方式一
public class ControllerExceptionAdvice {
//只有出现AccessDeniedException异常才调转403.jsp页面
@ExceptionHandler(AccessDeniedException.class)
public String accessDeniedException() {
return "forward:/403.jsp";
}
@ExceptionHandler(Exception.class)
public String runtimeException() {
return "forward:/404.jsp";
}
}
8.2 处理方式二
public class MyExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView mv = new ModelAndView();
mv.addObject("msg", "系统异常");
if (e instanceof MyException) {
mv.setViewName("error");
} else if (e instanceof AccessDeniedException) {
mv.setViewName("forward:/403.jsp");//写redirect也可以
} else if(e instanceof RuntimeException){
mv.setViewName("redirect:/404.jsp");//写redirect也可以 404 没有机会进到这个controller
}
return mv;
}
}
还有web.xml的配置方式就不介绍了