web使用shiro框架时,怎么设置 session 永不过期?session.setTime(-1000)行不通

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了web使用shiro框架时,怎么设置 session 永不过期?session.setTime(-1000)行不通相关的知识,希望对你有一定的参考价值。

参考技术A Sets the time in milliseconds that the session may remain idle before expiring。
A negative value means the session will never expire
you need sets A negative value is long.
session.setTimeout(-1000l);
参考技术B 是什么故障

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。

以上是关于web使用shiro框架时,怎么设置 session 永不过期?session.setTime(-1000)行不通的主要内容,如果未能解决你的问题,请参考以下文章

Shiro框架与SpringMVC之间的冲突

细说shiro之六:session管理

shiro怎么设置未登录时默认地址,现在是没有登录会跳到登录地址

shiro+spring+strul2做登陆时没进入authorizingrealm怎么回事

ssm整合shiro时web。xml中配置filter,tomcat报错

(转)shiro权限框架详解06-shiro与web项目整合(下)