实现shiro认证失败后返回json功能

AccessControlFilter

  • 访问控制过滤器,继承PathMatchingFilter过滤器,重写onPreHandle方法.
    实现shiro认证失败后返回json功能_第1张图片
  • isAccessAllowed 是否允许访问
  • onAccessDenied 是否拒绝访问

    我们通过重写上边两个方法来控制过滤逻辑,实现当前的需求,用户不登录点赞提示请登录

  • 定义一个LoginAuthFilter继承AccessControlFilter
  • 前端js渲染脚本

    // 前端弹窗的js代码
    private static final String JS =
        "";
    private String loginUrl = "/login";
  • 重写isAccessAllowed方法判断用户是否登录

    @Override
    protected boolean isAccessAllowed(
        ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
      Subject subject = SecurityUtils.getSubject();
    
      if (null != subject) {
        if (subject.isRemembered()) {
          return true;
        }
        if (subject.isAuthenticated()) {
          return true;
        }
      }
      return false;
    }
  • 重写onAccessDenied方法,ajax请求返回错误code,提示‘请登录’否则跳转到登录页
    查看完整代码片段移步

    效果如下图

    实现shiro认证失败后返回json功能_第2张图片
    点击点赞按钮查看效果

你可能感兴趣的:(技术)