前后端分离项目shiro验证
来源:互联网 发布:开淘宝店物流怎么解决 编辑:程序博客网 时间:2024/06/06 15:52
公司新项目,要做前后端分离项目,在开发过程中,需要使用shiro来做会话管理。由于是前后端分离 ,前端是通过ajax请求后端地址,后端程序没办法将sessionId写到请求浏览器cookie中,所以需要重新设想方案。
通过对shiro项目研究发现,shiro框架在每次请求的cookie中,都带有一对这样的参数
JSESSIONID=476dae2a-4cf7-49f9-a684-3a4736d2b1b6
然后,我们使用httpclinet 带上该cookie模拟请求,发现可以通过验证,拿到数据。 然后通过调试发现,这个JSESSIONID所保存的就是回话sessionId。所以我们设想,在登录的时候,给前端返回改字段,让前端将这个字段写入到cookie中,这样每次请求自动带上了该cookie,从而实现会话验证。
shiro的配置文件如下:
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"/> <property name="loginUrl" value="/api/user/login"/> <property name="successUrl" value="/"/> <property name="unauthorizedUrl" value="/page/401"/> <property name="filters"> <util:map> <entry key="login" value-ref="loginFilter"></entry> </util:map> </property> <property name="filterChainDefinitions"> <value> <!-- 登录页允许访问 --> /api/user/login = anon <!-- 其他资源需要认证 --> /** = login </value> </property></bean>
对于登入接口不做权限控制,对于其他接口增加了一个拦截器的配置。
拦截器的代码如下
public class LoginFilter extends AccessControlFilter { @Override protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception { Subject subject = SecurityUtils.getSubject(); if(null != subject && subject.isAuthenticated()){ return Boolean.TRUE; } /* if (WebUtils.isAjax(request)) {// ajax请求*/ Map<String,String> resultMap = new HashMap<String, String>(5); resultMap.put("code", MessageCode.USER_NOT_LOGIN[0]); resultMap.put("status", Constant.STATUS_FAIL); resultMap.put("msg", MessageCode.USER_NOT_LOGIN[1]);//当前用户没有登录! WebUtils.out((HttpServletRequest) request,(HttpServletResponse) response, resultMap); /*}*/ return Boolean.FALSE ; } @Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { //保存Request和Response 到登录后的链接 /* saveRequestAndRedirectToLogin(request, response);*/ return Boolean.FALSE ; }}
拦截器对于所有未登录,或者session过期的用户直接返回json拦截。
阅读全文
0 0
- 前后端分离项目shiro验证
- Shiro+Cas微服务化及前后端完全分离
- 前后端分离项目实践分析
- 前后端分离项目实践分析
- 构建SpringMVCRestful前后端分离项目实例
- 前后端分离项目:后台管理
- Javaweb项目如何做到前后端分离
- WEB前后端分离开发中的验证与安全问题
- web前后端分离
- 前后端分离
- 前后端分离问题
- 前后端分离
- 前后端分离方案
- 前后端分离(一)
- 前后端分离(二)
- 前后端分离(三)
- 前后端分离实践
- 前后端完全分离
- 机器学习储备(11):说说离散型随机变量
- 机器学习储备(12):二项分布的例子解析
- Android Architecture Components应用架构组件源码详解(基于1.0以上)(第二篇ViewModel和LiveData)
- android wifi间的通讯
- 基本查询 习题1-11
- 前后端分离项目shiro验证
- kafka常用命令(cdh5.10.0+kafka)
- 30分钟掌握ES6/ES2015核心内容(上)
- SCI投稿过程总结、投稿状态解析、修稿处理、拒稿后对策及接受后总结等
- struts2 中的 addActionError 、addFieldError、addActionMessage的方法
- 【Scikit-Learn 中文文档】聚类
- HttpURLConnection实现HttpClient工具类(get/post请求,文件上传)
- 复习下linux
- 将一个数据库里的表及数据复制到另一个数据库的表里