Shiro + SSM(框架) + Freemarker(jsp)
Shiro + SSM(框架) + Freemarker(jsp)讲解的权限控制Demo,还不赶快去下载?
我们知道Ajax不能做页面redirect和forward跳转,所以Ajax请求假如没登录,那么这个请求给用户的感觉就是没有任何反应,而用户又不知道用户已经退出或是 Session 超时了。这个时候如何解决?
Shiro 教程,Ajax请求拦截跳转页面方案
在登录拦截器中,如我们自己定义的LoginFilter 中,先行判断下,是否为 Ajax 请求,如果是 Ajax 请求并且没有相关权限,采用Response 输出一段 JSON 数据返回即可。
判断请求是否为Ajax请求
/*** 是否是Ajax请求* @param request* @return*/public static boolean isAjax(ServletRequest request){String header = ((HttpServletRequest) request).getHeader("X-Requested-With");if("XMLHttpRequest".equalsIgnoreCase(header)){LoggerUtils.debug(CLAZZ, "当前请求为Ajax请求");return Boolean.TRUE;}LoggerUtils.debug(CLAZZ, "当前请求非Ajax请求");return Boolean.FALSE;}
Response 输出JSON数据
/*** 使用 response 输出JSON* @param hresponse* @param resultMap* @throws IOException*/public static void out(ServletResponse response, Map<String, String> resultMap){PrintWriter out = null;try {response.setCharacterEncoding("UTF-8");//设置编码response.setContentType("application/json");//设置返回类型out = response.getWriter();out.println(JSONObject.fromObject(resultMap).toString());//输出} catch (Exception e) {LoggerUtils.fmtError(CLAZZ, e, "输出JSON报错。");}finally{if(null != out){out.flush();out.close();}}}
Shiro Filter 判断Ajax 请求并且处理
package com.sojson.core.shiro.filter;import java.util.HashMap;import java.util.Map;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import org.apache.shiro.web.filter.AccessControlFilter;import com.sojson.common.model.UUser;import com.sojson.common.utils.LoggerUtils;import com.sojson.core.shiro.CustomShiroSessionDAO;import com.sojson.core.shiro.token.manager.TokenManager;/**** <p>* <p>* 博客地址:http://www.cnblogs.com/123hll/* <p>* <p>** 判断登录** <p>** 区分 责任人 日期 说明<br/>* 创建 Helei 2017年7月2日 <br/>** @author he-lei* @emailhelei212@foxmail.com* @version 1.0,2017年7月2日 <br/>**/public class LoginFilter extends AccessControlFilter {final static Class<LoginFilter> CLASS = LoginFilter.class;// session获取CustomShiroSessionDAO customShiroSessionDAO;@Overrideprotected boolean isAccessAllowed(ServletRequest request,ServletResponse response, Object mappedValue) throws Exception {UUser token = TokenManager.getToken();if (null != token || isLoginRequest(request, response)) {// &&// isEnabled()return Boolean.TRUE;}if (ShiroFilterUtils.isAjax(request)) {// ajax请求Map<String, String> resultMap = new HashMap<String, String>();LoggerUtils.debug(getClass(), "当前用户没有登录,并且是Ajax请求!");resultMap.put("login_status", "300");resultMap.put("message","\u5F53\u524D\u7528\u6237\u6CA1\u6709\u767B\u5F55\uFF01");// 当前用户没有登录!ShiroFilterUtils.out(response, resultMap);}return Boolean.FALSE;}@Overrideprotected boolean onAccessDenied(ServletRequest request,ServletResponse response) throws Exception {// 保存Request和Response 到登录后的链接saveRequestAndRedirectToLogin(request, response);return Boolean.FALSE;}public void setCustomShiroSessionDAO(CustomShiroSessionDAO customShiroSessionDAO) {this.customShiroSessionDAO = customShiroSessionDAO;}}
前端Javascript处理Ajax请求返回值
首先提供一个判断方法:
/*** 判断是否登录,没登录刷新当前页,促使Shiro拦截后跳转登录页* @param result ajax请求返回的值* @returns {如果没登录,刷新当前页}*/function isLogin(result){if(result && result.login_status && result.login_status == 300){window.location.reload(true);//刷新当前页}return !0;//返回true}
然后来一个栗子:
//改变状态function changeSessionStatus(sessionIds,status,self){status = !parseInt(status);//loadingvar load = layer.load();$.post("${basePath}/member/changeSessionStatus.shtml",{status:status,sessionIds:sessionIds},function(result){layer.close(load);if(isLogin(result)){//判断是否登录if(result && result.status == 200){return self.text(result.sessionStatusText),self.attr('status',result.sessionStatus),self.parent().prev().text(result.sessionStatusTextTd);layer.msg('操作成功'),!1;}else{return layer.msg(result.message,function(){}),!1;}}},'json');}
Shiro + SSM(框架) + Freemarker(jsp)的更多相关文章
- ssm框架使用jsp提交表单到controller
jsp代码: controller代码:
- (原创)ssm sql 例子(freemarker+jsp)
ssm整合地址:http://www.cnblogs.com/xiaohuihui96/p/6104351.html 接下讲解一个插入语句的流程和顺带讲解freemarker+jsp视图的整合 初次接 ...
- shiro权限控制(一):shiro介绍以及整合SSM框架
shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证.授权.加密和会话管理等功能 . shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是 ...
- ssm框架与shiro的整合小demo,用idea开发+maven管理
shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证.授权.加密和会话管理等功能 . shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是 ...
- shiro系列三、ssm框架整合shiro实现权限控制
shiro权限框架是一个非常优秀的框架,前面的几篇文章对shiro进行了非常详细的介绍和原理分析,那么接下来让我们开始在web项目中使用它(javase也能用shiro): 一.数据库表结构设计 二. ...
- [JSP]Maven+SSM框架(Spring+SpringMVC+MyBatis) - Hello World
来源:http://blog.csdn.net/zhshulin/article/details/37956105?utm_source=tuicool&utm_medium=referral ...
- 百度富文本编辑器ueditor在jsp中的使用(ssm框架中的应用)
折腾了一下午终于把百度富文本编辑器ueditor搞定了! 项目地址:https://github.com/724888/lightnote_new 首先我参考了一个ueditor的demo ...
- SSM框架之批量增加示例(同步请求jsp视图解析)
准备环境:SSM框架+JDK8/JDK7+MySQL5.7+MAVEN3以上+Tomcat8/7应用服务器 示例说明: 分发给用户优惠券,通过checkbox选中批量分发,对应也就是批量增加. 对于公 ...
- java官网门户源码 SSM框架 自适应-响应式 freemarker 静态模版引擎
来源:http://www.fhadmin.org/webnewsdetail3.html 前台:支持(5+1[时尚单页风格])六套模版,可以在后台切换 官网:www.fhadmin.org 系统介绍 ...
随机推荐
- dedecms4张关键表解析之1
虽然dedecms默认共有87张表,但是只有4张最核心,最最要的表. 1.第一张表:dede_arctype 栏目表 dede设计者认为不管存放什么样的数据(文章,商品,电影)都应该属于某个栏目(类 ...
- [BeiJing2009 WinterCamp]取石子游戏 Nim SG 函数
Code: #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ...
- TP5 模板渲染语法
每次都要去网上找,又发现都不全.所以自己记录一下 volist:循环 {volist name="collection" id="v"} {/volist} i ...
- gcd步数
题目描述 一个有趣的函数F(a,b),表示对于数对(a,b)调用辗转相除法的步数为多少 例如 (24,40)....0 (16,24).....1 (8,16).....2 (0,8)....3,即f ...
- uname---用于打印当前系统相关信息
uname命令用于打印当前系统相关信息(内核版本号.硬件架构.主机名称和操作系统类型等). 语法 uname(选项) 选项 -a或--all:显示全部的信息: -m或--machine:显示电脑类型: ...
- shell清除日志小脚本
#!/bin/bash #清除日志脚本 LOG_DIR=/var/log ROOT_UID=0 #用户id为0的 ,即为root if [ "$UID" -ne "$RO ...
- subline 快捷键与功能解释
选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数 ...
- ArcGIS api for javascript——加入地图并显示x,y坐标
这个示例报告了用户在地图上悬停和拖拽鼠标的鼠标指针坐标.通过事件监听器来更新鼠标移到的x和y坐标. 下行代码创建了地图: var map = new esri.Map("map") ...
- NYOJ_77 开灯问题
题目地址 分析: 用一个数组来保存每盏灯的操作的次数.推断奇偶就可以推断灯的状态. 最后的输出格式须要注意一下空格的位置,思路就是现输出一个.剩下来的输出在前面加一个空格. 空格用_表示: 1_3_5 ...
- 自己定义View之Chart图标系列(1)——点阵图
近期要做一些图表类的需求,一開始就去github上看了看,发现开源的图表框架还是蛮多的.可是非常少有全然符合我的需求的.另外就是使用起来比較麻烦.所以就决定自己来造轮子了~~~ 今天要介绍的就是And ...