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
* @email
helei212@foxmail.com* @version 1.0,2017年7月2日 <br/>
*
*/
public class LoginFilter extends AccessControlFilter {
final static Class<LoginFilter> CLASS = LoginFilter.class;
// session获取
CustomShiroSessionDAO customShiroSessionDAO;
@Override
protected 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;
}
@Override
protected 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);
//loading
var 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 系统介绍 ...
随机推荐
- <Three.js>(第一节)环境搭建
Three.js顾名思义3D的js库.是运行在浏览器的基于webgl的3D引擎.该引擎是github上的一个开源项目,下载地址:https://github.com/mrdoob/three.js/ ...
- 通过浏览器地址进行 post get 请求
首先安装curl 1.post chcp 65001 title 接口测试脚本 d: cd D:\curl\ curl -l -X POST -d "params" url ech ...
- shell应用之批量添加用户实例
这里要实现功能介绍 读取一个用户列表文件 给列表中的用户添加随机密码需要包含大小写字符和数字 保存对应的用户和密码文件 这些用户属于同个用户组 1.列表文件 [root@mail ~]# cat li ...
- linux Cenos-7.0下安装jdk搭建环境变量
搭建linux系统的java环境本人目前所知有两种方式: 第一种是从oracle官网下载linux系统的jdk版本: 第二种是使用yum命令的方式下载安装,咱们今天讲的是第一种方式. 一.工具准备: ...
- 水池接雨水的经典问题I&II
https://leetcode.com/problems/trapping-rain-water https://leetcode.com/problems/trapping-rain-water- ...
- IIS 无法读取配置节"system.web.extensions",由于它缺少节声明
作者:jiankunking 出处:http://blog.csdn.net/jiankunking 今天在本地安装iis.搭建站点,应用程序的时候报错以下的错误: server错误 Internet ...
- legend---六、php脚本变量的生命周期是怎样的
legend---六.php脚本变量的生命周期是怎样的 一.总结 一句话总结:应该是脚本结束变量的生命周期就完了 1.外部js找不到元素是怎么回事? 1 function myDailyTaskFin ...
- assert 的理解
assert 可以实现如下功能: 保证参数之间的大小等约束关系: 函数执行过程中得到的中间结果是否符合预期: def gen_batch(batch_size, skip_window, num_sk ...
- powerpoint(ppt) 的制作
1. 幻灯片母版 所谓母版,是共享的部分,也即想在全部幻灯片重复出现的元素. 首先,幻灯片母版在菜单栏的[视图]选择[幻灯片母版]显示和查看. 通过幻灯片母版的编辑和设计,可进一步: 在幻灯片的相关位 ...
- Mysql之索引的基本概念
一.索引是什么? 比如我们要在字典中找某一字,如何才能快速找到呢?那就是通过字典的目录. 对数据库来说,索引的作用就是给‘数据’加目录. 二.索引算法 设有N条随机记录,不用索引,平均查找N/2次,那 ...