RBAC系统
权限(Permission):
用户使用系统的合法性的判断依据
作用:
使用该系统的依据
组成:
认证(鉴权)+授权
认证:
校验合法性
授权:
认证完成后,该用户具备的操作范围
用户: 查询个人信息 / 存取
工作人员: 购买基金
经理: 分配工作人员的权限
操作
用户名+密码(加密)
用户名(手机号)+密码 完成认证, 通过不同的数据表(tb_user / tb_manager / tb_admin)判断用户的权限
用户名+密码(加密)+盐
用户名+密码+盐值(salt) 密码: 123456 盐值: 2345 md5(md5(123456)+md5(2345))
通过转发实现控制(jsp)
登录完成后转发管理页面(主要针对jsp)
jsp: 放在/WEB-INF/jsp/index.jsp
通过请求头携带token
前后端分离:
前端控制页面的跳转,通过js把特征标记存储在localStorage/sessionStorage,在每一次打开页面/请求接口的时候,通过请求头携带该标记(token)
if(!window.localStorage.getItem('auth')){
window.location.href='/';
return false;
}
当前端存储名为token, 值在java中产生(UUID)
String phone = req.getParameter("phone");
//登录成功
// 生成token(唯一性/ 复杂度)
String token = UUID.randomUUID().toString().replace("-", "");
// 服务器把token值存储在session中
HttpSession session = req.getSession();
session.setAttribute("token",token);
当访问业务操作中
// 查询业务要求前端携带token的请求头
String token = req.getHeader("token");
if(StringUtil.isEmpty(token)){
throw new BusinessException(ExceptionCode.WRONG_TOKEN);
}
// 校验token的合法性
HttpSession session = req.getSession();
Object sysToken = session.getAttribute("token");
// 用户携带的token请求头和session中存的token不一致
if(!token.equals(sysToken)){
throw new BusinessException(ExceptionCode.WRONG_TOKEN);
}
过滤器进行判断
利用过滤器设置权限的统一判断
利用拦截器判断token(SpringMVC)