前后端分离项目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("用户未登录!")); }
----------------
权限不足时,在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()方法,这里就不贴出来了