shiro使用更改过滤拦截器的方法完成认证授权返回json格式信息

先介绍一下常用的拦截器

有关认证的拦截器:

拦截器名 默认拦截器类 说明
authc FormAuthenticationFilter 需要认证才可以访问–主要属性:loginUrl:登录的url,默认login.jsp,如果被这个过滤器拦截后,会重定向这个url,successUrl:登录成功后重定向的url
user UserFilter 需要认证或记住我才可以访问
logout LogoutFilter 退出url主要属性:redirectUrl:退出后重定向的url,默认"/“如设置”/logout=logout"后,当访问/logout会被拦截,执行退出,再重定向到redirectUrl
anon AnonymousFilter 不拦截,总会放行

有关授权的拦截器:

拦截器名 默认拦截器类 说明
roles RolesAuthorizationFilter 验证当前用户是否拥有所有角色,,主要属性:unauthorizedUrl:未授权重定向的urlloginUrl:登录页面的url如配置"/admin/**=roles[user,admin]"则访问/admin/时,如果该用户没有同事拥有user和admin两种角色,则重定向到unauthorizedUrl
perms PermissionsAuthorizationFilter 验证当前用户是否拥有所有权限,主要属性和roles一致

我们认证选用user拦截器,授权选用perms

1.写一个自定义过滤器用来认证

public class ShiroLoginFilter extends UserFilter {
   
//Shiro 认证失败返回JSON
    @Override
    protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException {
   
        response.setCharacterEncoding("UTF-8");
                //JsonResult 为自己写的封装返回信息类下面有
        response.setContentType("application/json; charset=utf-8");
        String json = ObjectMapperUtil.toJson(new JsonResult(0, "请登录", null)); //ObjectMapperUtil为自己写的工具类 下面有
        response.getWriter().print(json);
    }
}

2.写一个自定义过滤器用来授权

public class ShiroRoleFilter extends PermissionsAuthorizationFilter {
   
//Shiro 没有权限失败返回JSON
        @Override
        protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException {
   
            Subject subject = getSubject(request, response);
            if (subject.getPrincipal() == null) {
   
                //跳转至登录页
                saveRequestAndRedirectToLogin(request, response);
            } else {
   
                //给前端提示无接口访问权限的错误码
                saveRequestAndReturnApiAccessError(request, response
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值