shiro权限框架的使用和一个小问题
Posted kingofjava
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shiro权限框架的使用和一个小问题相关的知识,希望对你有一定的参考价值。
shiro-xml中部分配置
<!--shiro的过滤器:名字必须和web.xml中那个没用的过滤器名字一样--> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"/> <!--没登陆跳转页面--> <property name="loginUrl" value="/login/login"/> <!--登陆成功的跳转页面--> <property name="successUrl" value="/dept/main"/> <!--没有权限跳转的页面--> <property name="unauthorizedUrl" value="/unauthorized"/> <!--设置哪些页面能不登陆访问,哪些页面访问需要特定权限--> <!--可以不在这里配置,用数据库配置,通过Java代码,交给spring管理--> <!--引入java代码的设置--> <property name="filterChainDefinitionMap" ref="newshiroFilterForMap"/> <property name="filters"> <map> <entry key="kperms" value-ref="permissionFilter"/> </map> </property> </bean> <!--自定义权限过滤--> <bean class="cn.king.aisell.shiro.AiSellPermissionsAuthorizationFilter" id="permissionFilter"/> <!--连接java代码部分--> <bean id="newshiroFilterForMap" factory-bean="shiroFilterForMap" factory-method="getShiroFilterForMap"/> <bean id="shiroFilterForMap" class="cn.king.aisell.shiro.ShiroFilterForMap"/>
为了将权限设置改到数据库中,方便前端页面修改,所以不在xml中配置。通过创建一个类读取数据库来实现,这个类要交给spring管理。
public class ShiroFilterForMap { @Autowired private IPermissionService iPermissionService; public Map<String,String> getShiroFilterForMap(){ //LinkedHashMap:有序的map LinkedHashMap<String, String> shiroFilterForMap = new LinkedHashMap<>(); //模拟数据库的值 //设置游客能访问的路径 shiroFilterForMap.put("/login/login.jsp","anon"); shiroFilterForMap.put("/static/**","anon"); shiroFilterForMap.put("/easyui/**","anon"); shiroFilterForMap.put("/static/css/*","anon"); shiroFilterForMap.put("/static/js/*","anon"); shiroFilterForMap.put("/static/imgs/*","anon"); shiroFilterForMap.put("/upload/*","anon"); shiroFilterForMap.put("*.css","anon"); shiroFilterForMap.put("*.js","anon"); shiroFilterForMap.put("/login/**","anon"); //从数据库读 设置权限"perms[dept:list]" List<Permission> permissionServiceAll = iPermissionService.findAll(); permissionServiceAll.forEach(e->{ shiroFilterForMap.put(e.getUrl(),"kperms["+e.getSn()+"]"); }); //拦截所有 shiroFilterForMap.put("/**","authc"); return shiroFilterForMap; } }
拦截所有一定要放在最后。一定要记住顺序。
正常配置完了。我在这其中遇到一个问题。服务器启动报错:xxx为空值。
导致我的项目无法启动。
经过排查。我发现是,我数据库中,Url其中一栏出现了空值,导致出现空指针异常,不能正常创建bean。
以上是关于shiro权限框架的使用和一个小问题的主要内容,如果未能解决你的问题,请参考以下文章
springboot mybatis 后台框架平台 集成代码生成器 shiro 权限