先后端分离项目shiro的未登陆和权限不足

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

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

<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,跳转登录界面web

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

 

----------------ajax

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

<!-- 异常处理,暂时只处理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("权限不足")); }

 --------apache

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

相关文章
相关标签/搜索