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。

猜你喜欢

转载自www.cnblogs.com/kingofjava/p/10611920.html