前后端分离项目shiro的未登录和权限不足

在前后端分离的项目中、前端代码和后端代码几乎不在同一个目录下,甚至不是在一台服务器上;我这个项目部署在linux、同一台服务器,不同目录下;所有的页面跳转由前台路由,后台只是提供返回的数据;

干货↓    <!-- Shiro的Web过滤器 -->

    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"/>
        <!--用户登陆不成功-->
        <property name="loginUrl" value="/unauth.do"/>
        <property name="filterChainDefinitions">
            <value>
                <!--anon 表示不需要认证以及授权-->
                <!--authc 表示需要认证 没有登录是不能进行访问的-->
                <!--perms 表示需要该权限才能访问的页面 /user/* = perms[/*] -->
                <!--roles 表示需要角色才能访问的页面 /* = roles[管理员]-->
                /admin/unauth.do=anon
                /admin/unauthorized.do=anon
                /admin/logout.do=anon
                /admin/validate.do=anon
                /admin/getRandomCode.do=anon
                /admin/resetPassword.do=anon
                /layui/**=anon
                /res/**=anon
                /**=authc
            </value>
        </property>
    </bean>

  其中loginUrl是后台的一个接口;给前台返回的一个自定义状态码和消息;前台捕获ajax返回的406code,清除session,跳转登陆界面

    /**
     * 未登录,shiro应重定向到登录界面,此处返回未登录状态信息,由前端控制跳转页面
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/unauth")
    public Result unauth() {
        return new Result().success(false).error(406).msg(propertiesUtil.getValue("用户未登录!"));
    }

----------------

权限不足时,在springmvc.xml中配置了一个异常处理bean

    <!-- 异常处理,暂时只处理403无权限异常-->
    <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="exceptionMappings">
            <props>
                <prop key="org.apache.shiro.authz.UnauthorizedException">/unauthorized.do</prop>
                <prop key="org.apache.shiro.authz.UnauthenticatedException">/unauthorized.do</prop>
            </props>
        </property>
    </bean>
其中/unauthc.do也是后台的一个接口,给前台返回无权限状态码
    /**
     * 权限不足,shiro应重定向到403界面,此处返回权限不足信息,由前端控制跳转页面
     */
    @ResponseBody
    @RequestMapping(value = "/unauthorized")
    public Result unauthorized(){
        return new Result().success(false).error(403).msg(propertiesUtil.getValue("权限不足"));
    }

 --------

前台的的ajax捕获状态码可以参考ajaxsetup()方法,这里就不贴出来了

猜你喜欢

转载自www.cnblogs.com/xiwenlejian233/p/10560498.html