shiro的ajax请求,AJAX和shiro的请求问题

原因:当我们使用Shiro发送AJAX请求的时候,会自动跳转页面(而AJAX不能@R_532_404@面,添砖会出很多错误)

因为是shiro自己的原因,所以我们需要使用我们自己定义的

在shiro中使用这个类PermissionsAuthorizationFilter来过滤请求所以覆写

AJAX特点

普通请求

6d1fde8a515681b9a9eb196adb8d0752.png

81258a02edbdf339fa6960e012d37523.png

AJAX

3d8d9cb5823bfc707a1f21e4290c35b7.png

3a902b8eb8e74b691f9b5592cfa1c717.png

所以我们可以通过七种不同来判断是否为AJAX请求

写一个类继承PermissionsAuthorizationFilter

jia.gif

jian.gif

packagecn.jiedada.aisell.web.shiro;importorg.apache.shiro.subject.Subject;importorg.apache.shiro.util.StringUtils;importorg.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter;importorg.apache.shiro.web.util.WebUtils;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;/*** 写一个自己的Shiro来判断出我们需要的东西处理Ajax权限*/

public class AisellPermissionsAuthorizationFilter extendsPermissionsAuthorizationFilter {

@Overrideprotected boolean onAccessDenied(ServletRequest request,ServletResponse response) throwsIOException {

Subject subject= this.getSubject(request,response);//判断用户是否登陆

if (subject.getPrincipal() == null) {this.saveRequestAndRedirectToLogin(request,response);

}else{//只用通过HttpServletRequest才能获得请求头中的数据才能判断

HttpServletRequest httpRequest =(HttpServletRequest) request;

HttpServletResponse httpResponse=(HttpServletResponse)response;//查看是否是AjAX请求

String xRequested = httpRequest.getHeader("X-Requested-With");if(xRequested!=null&&"XMLHttpRequest".equals(xRequested)){//传入前需要在请求头中传入响应,让他知道我们返回的数据是AJAX请求

httpResponse.setContentType("text/json; charset=UTF-8");//带回AJAX请求,把数据作为流传回去这里需要传出标准的json数据格式

httpResponse.getWriter().print( "{\"success\":false,\"msg\":\"没有权限\"}");

}else{

String unauthorizedUrl= this.getUnauthorizedUrl();if(StringUtils.hasText(unauthorizedUrl)) {

WebUtils.issueRedirect(request,response,unauthorizedUrl);

}else{

WebUtils.toHttp(response).sendError(401);

}

}

}return false;

}

}

View Code

把application-shiro.xml中默认的配置设置为我们自己的配置

jia.gif

jian.gif

View Code

其实就是这一句

然后需要把我们shrio中默认的值改为aisellPers这个为我们上面的key值

List permissions =permissionService.findAll();

permissions.forEach(p->{

map.put(p.getUrl(),"aisellPers["+p.getSn()+"]");

});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值