ssm整合shiro后,遇到ajax请求的处理
来源:互联网 发布:文字扫描仪软件 编辑:程序博客网 时间:2024/06/05 05:03
异步请求权限充足时,没有问题,但是当权限不足时,ajax请求之后,就要进入权限不足的界面,但是ajax又不支持整页刷新,所以就要对框架进行修整.
1,添加自定义shiro过滤器,对ajax请求进行过滤
public class RoleAUthorizationFilter extends AuthorizationFilter {
@Override
protected boolean onAccessDenied(ServletRequest request,
ServletResponse response) throws IOException {
Subject subject = getSubject(request,response);
Message message =new Message();
if (subject.getPrincipal() ==null) {
if (MyWebUtils.isAjax(request)) {
message.setMessage("您还未登录,请登录系统");
MyWebUtils.out(response,message);
} else {
saveRequestAndRedirectToLogin(request,response);
}
} else {
if (MyWebUtils.isAjax(request)) {
message.setFlag(2);
message.setMessage("此账户没有权限,请联系管理员");
MyWebUtils.out(response,message);
} else {
String unauthorizedUrl = getUnauthorizedUrl();
if (StringUtils.hasText(unauthorizedUrl)) {
WebUtils.issueRedirect(request,response, unauthorizedUrl);
} else {
WebUtils.toHttp(response).sendError(401);
}
}
}
returnfalse;
}
@Override
protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, ObjectmappedValue)
throws Exception {
Subject subject = getSubject(request,response);
String[] rolesArray = (String[])mappedValue;
if (rolesArray ==null || rolesArray.length == 0) {
// no roles specified, sonothing to check - allow access.
returntrue;
}
Set<String> roles = CollectionUtils.asSet(rolesArray);
for (Stringrole : roles) {
if (subject.hasRole(role)) {
returntrue;
}
}
returnfalse;
}
}
查看原码发现, AuthorizationFilter是个抽象类,它继承了AccessControlFilter这个抽象类,实现了里面的onAccessDenied方法,这个方法是校验不通过之后的处理,我们要修改,就自定义一个过滤器,继承AuthorizationFilter,重写isAccessAllowed(校验通过的方法)和onAccessDenied方法,把对ajax请求的判断加在校验不通过的处理方法中.2, 定义好自定义过滤器之后,在shiro.xml中添加权限
<beanid="shiroFilter"class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<propertyname="securityManager"ref="securityManager"/>
<propertyname="loginUrl"value="/login"/>
<propertyname="successUrl"value="/userLogin"/>
<propertyname="unauthorizedUrl"value="/unanthorized"/>
<propertyname="filters">
<map>
<entrykey="role">
<beanclass="com.snowlink.filter.RoleAUthorizationFilter"/>
</entry>
</map>
</property>
<!-- 基本系统级别权限配置 -->
<propertyname="filterChainDefinitions">
<value>
/css/* = anon
/js/* = anon
/img/* = anon
/plugins/* = anon
/jsp/login.jsp = anon
/userLogin = anon <!-- 登录相关不拦截 -->
/InsertUser = authc,roles[admin]
/deleteUser = authc,role[admin]
/logOut = authc
/** = authc
</value>
</property>
</bean>
注意黄色标记的,定义的entry里的key要和下面的过滤器名称相同,不然自定义过滤器就不会执行3,另外还有一点遇到的问题
@RequiresRoles("admin")
@RequestMapping("deleteUser")
public void deleteUser(HttpServletResponse response,Useruser) {
response.setCharacterEncoding("UTF-8");
intresult = userService.deleteUser(user);
Message message =new Message();
if(result == 1){
message.setFlag(1);
message.setMessage(Answer.OK);
}else {
message.setFlag(0);
message.setMessage(Answer.ERROR);
}
try {
response.getWriter().print(JSONObject.toJSON(message));
} catch (IOExceptione) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
在ajax请求返回数据时,不能用@ResponseBody标签返回对象,必须要用response.getWriter().print()响应给js,不然就会出现后台逻辑实现完成了,但是ajax进不了success,就会出现404
- ssm整合shiro后,遇到ajax请求的处理
- 关于shiro中 ajax请求登录失效的处理
- SSM+Shiro遇到的那些坑
- ssm整合shiro
- ssm+shiro+UEditor整合
- SSM+shiro整合
- 7、ssm整合shiro
- SSM整合shiro完整版
- idea ssm整合shiro shiro的基本用法
- 第一次整合ssm环境后,对请求流程的理解 ,以及一些配置
- shiro与SSM项目整合
- shiro与SSM项目整合
- Maven+SSM+Shiro整合配置
- ssm整合shiro实现权限
- Maven+SSM+Shiro整合配置
- SSM+shiro+maven整合配置
- Maven+SSM+Shiro整合配置
- SSM整合中遇到的问题总结
- linux用公钥免密码登录
- Python基础 常用内建模块
- 为什么学习Python以及Python的安装
- java中的length属性,length()方法,size()方法
- 微信小程序服务器端部署好后报错,后台无法进入登录界面
- ssm整合shiro后,遇到ajax请求的处理
- 【头条】赛门铁克预测2018年新技术攻击将成为主流
- 快速排序 c++实现2.0
- 颜色大全
- JS/JavaScript中两个等号 == 和 三个等号 === 的区别
- 跳槽准备
- js(一)---初识js
- 2017/12/19
- 深度网系统 谁会用 慷慨下给点教程呗