在先后端分离的项目中、前端代码和后端代码几乎不在同一个目录下,甚至不是在一台服务器上;我这个项目部署在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()方法,这里就不贴出来了后端