shiro stateless
Demo of shiro session and stateless
安全框架shiro的一个同时支持无状态和session登录的添加部分自定义的demo
什么是shiro
Shiro is a powerful and easy-to-use Java security framework that performs authentication, authorization, cryptography, and session management. With Shiro’s easy-to-understand API, you can quickly and easily secure any application – from the smallest mobile applications to the largest web and enterprise applications.
shiro是一个java服务端控制访问权限的安全框架
使用场景
由于公司手机端不能存cookie,所以传统的session存储登录信息的登录方式(后面简称session登录)不能用,所以需要一个既支持session登录后访问有访问权限控制的url又支持无状态化夹带加密token访问有访问权限控制的url的shiro配置。
这个demo适合以下几类情形人员服用:
- 面临上面我说的情况
- 接触过shiro,接触过spring boot。但不知道具体shiro拦截的是怎么起到作用的
- 接触过shiro,接触过spring boot。想把shiro 官方ini配置改写成java config配置的
这个demo不适合没有接触过shiro的人员,如果想要了解shiro基础的东西,推荐开涛的shiro的系列博客,地址
开涛博客 你们看完后会发现我的一些代码也是参考他的。我开始用shiro也是先看文档后看开涛的博客然后又参考了一些别的博客,再自己打断点看shiro源码来摸索的。
shiro默认访问步骤
shiro访问一个普通的url步骤大致是这样的
- 到 shiro 的 PathMatchingFilter preHandle 方法判断一个请求的访问权限是可以直接放行还是需要 shiro 自己实现的AccessControlFilter 来处理访问请求
- 假设到了 AccessControlFilter 实现类,首先在 isAccessAllowed 判断是否可以访问,如果可以则直接放行访问,如果不可以则到 onAccessDenied 方法处理,并继续调用 realm doGetAuthorizationInfo 授权判断是否有足够的权限来访问
- 假设有足够的权限的话就访问到自己定义的 controller了
如果这个url是登录请求的话,
那接下来:
- 在你自己的代码里会写到获取shiro的Subject,创建一个token,通常是UsernamePasswordToken,将请求参数的账户密码填充进去,然后调用subject.login(token)
- 接下来到支持处理这个token的realm中调用 realm doGetAuthenticationInfo 鉴权,鉴权后,session中就存有你的登录信息了
shiro开发步骤
原本shiro默认只支持session登录,不支持无状态形式的访问请求,只能做到阻止未登录用户访问需要访问权限的url,不符合我的需求。
要改的话就要看有没有一个东西来改变根据session控制访问逻辑。
可以实现 AccessControlFilter 来修改控制访问的逻辑
要做的有下面几方面