欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-10-06 14:32:25
在前后端分离的项目中、前端代码和后端代码几乎不在同一个目录下,甚至不是在一台服务器上;我这个项目部署在linux、同一台服务器,不同目录下;所有的页面跳转由前台路由,后台只是提供返回的数据; 干货↓ 其中loginUrl是后台的一个接口;给前台返回的一个自 ......

在前后端分离的项目中、前端代码和后端代码几乎不在同一个目录下,甚至不是在一台服务器上;我这个项目部署在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("用户未登录!"));
    }

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

 

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

权限不足时,在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("权限不足"));
    }

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

 --------

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