玩过extjs的都知道,extjs其实都是一些ajax的请求,所以对权限的控制比较麻烦。这里提供本人亲测的一个方法,供大家参考
一、利用可显示方法,就是的登录以后直接在最初的页面上显示你有权限的按钮或者操作。
二、第一种基本可以实现简单的 页面管控,但是由于没有在服务器端有权限验证动作,存在较大的安全隐患,所以先在后台给Spring MVC添加一个Filter,每次请求过来判断一下有么有 权限,如果没有权限就直接返回,但是由于每次返回得知都是不一样的,没办法在前台统一解析(当然你可以统一返回格式),所以直接用response.setContentType("NoPermission"),然后返回前台。前台在在一开始加载extjs代码的时候,给所有的ajax添加一个监听器,监听每次返回完成以后的数据。如果发现返回的头文件中包含 NoPermission,就代表没有权限,直接返回到你指定的页面等等。
//给所有ajax操作添加监听器,请求前看看是不是没有登录
Ext.Ajax.addListener("requestcomplete",function(conn, response, options, eOpts){
var msg = response.getAllResponseHeaders();
var str = msg['content-type'];
if(str!=null&&str!=undefined&&str!=""){
if(msg['content-type'].indexOf('NoPermission') != -1){
window.location.href='jsp/login.jsp';
}
}
},this);
这样一来,基本能完成对权限的管控。各位看官有好的方法也请一起探讨下。
这里有个问题,如果 extjs是form的submit来提交数据的话,返回的response中没有getAllResponseHeaders这个方法,所以需要稍微修改一下上面的代码,修改后的代码:
Ext.Ajax.addListener("requestcomplete",function(conn, response, options, eOpts){
if(typeof response.getAllResponseHeaders == "function"){
var msg = response.getAllResponseHeaders();
var str = msg['content-type'];if(str!=null&&str!=undefined&&str!=""){
if(msg['content-type'].indexOf('NoPermission') != -1){
window.location.href='jsp/login.jsp';
}
}
}else{
![](/qrcode.jpg)
//如果没有getAllResponseHeaders 方法
//说明是 form的submit ,如果返回时response.responseText 空 的话说明 是没有权限的操作。返回到 登录页面
var str = response.responseText;
if(!str){
window.location.href='toUms.jsp';
}
}
},this);