shiro框架总结二
来源:互联网 发布:nba骑士vs公牛数据 编辑:程序博客网 时间:2024/05/21 10:01
1.sessionid,以及cookie配置
<!-- 会话Cookie模板 --><bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<!-- 会话Cookie模板 --><bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie"> <constructor-arg value="v_v-s-baidu"/><!-- 这是一个坑来着,不能乱设置值,不然浏览器会设置为deleteme,下次浏览的时候cookie会不见了--> <property name="httpOnly" value="true"/> <!--cookie的有效时间 --> <property name="maxAge" value="-1"/></bean>
<!-- 会话Session ID生成器 --><bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator"/><!-- 会话验证调度器 --><bean id="sessionValidationScheduler" class="org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler"> <!-- 间隔多少时间检查,不配置是60分钟 --> <property name="interval" value="18000000"/> <property name="sessionManager" ref="sessionManager"/></bean><!-- Session Manager --><bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"><!-- 相隔多久检查一次session的有效性 --> <property name="sessionValidationInterval" value="1800000"/> <!-- session 有效时间为半小时 (毫秒单位)--> <property name="globalSessionTimeout" value="1800000"/> <property name="sessionDAO" ref="sessionDAO"/> <!-- 间隔多少时间检查,不配置是60分钟 --> <property name="sessionValidationScheduler" ref="sessionValidationScheduler"/> <!-- 是否开启 检测,默认开启 --> <property name="sessionValidationSchedulerEnabled" value="true"/> <!-- 是否删除无效的,默认也是开启 --> <property name="deleteInvalidSessions" value="true"/><!-- 会话Cookie模板 --> <property name="sessionIdCookie" ref="sessionIdCookie"/></bean><!-- 配置Session DAO的操作处理 --> <bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO"> <!-- 设置session缓存的名字,这个名字可以任意 --> <property name="activeSessionsCacheName" value="shiro-activeSessionCache"/> <!-- 定义该Session DAO操作中所使用的ID生成器 --> <property name="sessionIdGenerator" ref="sessionIdGenerator"/> </bean>
shiro是通过session进行管理用户的,通过用户回传的cookie进行判断2.各种拦截器(包括登录拦截器,角色拦截器,权限拦截器)
都继承AccessControlFilter这个类, 重写父类的isAccessAllowed()方法------》验证登录,权限等等
onAccessDenied()方法------》访问失败的跳转等等
3.配置授权认证
重头戏!!!为啥这么讲呢?登录验证,权限验证具体操作都在里面实现
<!-- 授权 认证 --><bean id="sampleRealm" class="shiro.token.SampleRealm" ></bean>
授权SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();info.setRoles(roles);info.setStringPermissions(permissions);登录验证(包含一个用户只能登录一次,不能重复登录)/** * 认证信息,主要针对用户登录, */@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException {ShiroToken token = (ShiroToken) arg0;UUser user;boolean b=false;//判断是否已经登录,也可以封装成一个实体类/* * 下面应该写成一个方法的,然后再创建一个实体类来保存session里面所有值,比如 * object.getString("nickname") */ Collection<Session> sessions = sessionDAO.getActiveSessions(); for(Session session:sessions){ String s=String.valueOf(session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY));//获得session中已经登录用户的名字 JSONObject object=JSONObject.fromObject(s); if(null!=object){ try{ if(null!=object.getString("nickname")){ String loginUsername=object.getString("nickname"); if(token.getUsername().equals(loginUsername)){ System.out.println(loginUsername+"已经登录,不能再次登录"); b=true; } } }catch (Exception e) {e.printStackTrace();} } }if(b==false&&token.getUsername().equals("ys")&&token.getPswd().equals("123456")){user =new UUser(token.getUsername(),token.getPswd()); }else{user=null;}if(null == user){throw new AccountException("帐号或密码不正确!");}else{//更新登录时间 last login timeuser.setLastLoginTime(new Date());}return new SimpleAuthenticationInfo(user,user.getPswd(), getName());}
4.定义各种跳转链接,以及配置链接的权限<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><property name="securityManager" ref="securityManager" /><property name="loginUrl" value="/u/index" /><!-- 页面错误处理 --><property name="successUrl" value="/" /><!-- 没有权限时候的跳转 --><property name="unauthorizedUrl" value="/?login" /><!--初始配置,现采用自定义--><property name="filterChainDefinitions" ><value>/u/login = anon/u/index=anon/WEB-INF/jsp/*=anon/u/hi=login,permission </value></property> <property name="filters"> <util:map> <entry key="login" value-ref="login"></entry> <entry key="role" value-ref="role"></entry> <entry key="permission" value-ref="permission"></entry> <entry key="authc"> <bean class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter" /> </entry> </util:map> </property></bean>
阅读全文
0 0
- shiro框架总结二
- Shiro 权限框架使用总结
- Shiro 权限框架使用总结
- Shiro 权限框架使用总结
- Shiro 权限框架使用总结
- shiro 框架的学习总结
- shiro学习总结(二)
- 安全认证框架Shiro (二)- shiro过滤器工作原理
- 权限验证框架Shiro学习(二)
- ssm+shiro基础框架搭建(二)
- 安全验证框架shiro(二)
- Shiro框架身份认证(二)
- Shiro学习总结(二)--Shiro的入门小例子
- shiro框架深入分析和个人总结
- 权限项目总结(二)shiro 基础
- Shiro框架
- shiro框架
- Shiro框架
- 在java中使用数组实现stack [译]
- Intellij idea 非Maven项目导出War包
- POJ2528-Mayor's posters(线段树+离散化)
- EditText金额输入(限制输入金额大小和小数点后两位)
- ROS中使用URDF
- shiro框架总结二
- Android无网络状态下使用GPS定位到省市县的一种简单实现方式
- HDU_2011多项式求和
- 二叉树统计单词个数
- 90后维密超模放弃500万美元年薪去当程序媛,实力演绎超模的开挂人生~
- Facebook 最热门的开源项目推荐!
- 一图看懂,安卓开发编程语言之间的对决:Kotlin Vs Java
- 添加了点击事件之后原本的hover属性就不运行了
- 体绘制