好吧,shiro是真正意义上,自己学的一个新的东西……

写个文档记录下下。(好吧,我承认这是别人一直逼着我写的,唉。)

一、在web.xml配制shiroFilter

 <filter><filter-name>shiroFilter</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping><filter-name>shiroFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping>

二、在spring的application.xml中添加配制,缓存配制暂未使用

 <!--securityManager是shiro的核心,初始化时协调各个模块运行--><bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"><!--单个realm使用realm,如果有多个realm,使用realms属性代替--><property name="realm" ref="shiroRealm" /><!-- <property name="cacheManager" ref="shiroEhcacheManager" /> --></bean><!--realm配置,realm是shiro的桥梁,它主要是用来判断subject是否可以登录及权限等--><bean id="shiroRealm" class="com.shiro.realm.ShiroRealm"><property name="userService" ref="userService" /></bean><bean id="userService" class="com.shiro.service.UserService" /><!--shiro过滤器配置,bean的id值须与web中的filter-name的值相同--><bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"><property name="securityManager" ref="securityManager" /><!-- 没有权限或者失败后跳转的页面 --><property name="loginUrl" value="/index.jsp" /><property name="successUrl" value="/loginSuccess.jsp" /><property name="unauthorizedUrl" value="" /><property name="filterChainDefinitions"><value>/logout.do = logout/user/** = authc/admin/** = authc,roles[admin]</value></property></bean><!-- 用户授权/认证信息Cache, 采用EhCache 缓存 --><!-- <bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"><property name="cacheManagerConfigFile" value="/WEB-INF/ehcache-shiro.xml" /></bean> --><!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->  <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>  <!-- AOP式方法级权限检查  --><bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor">  <property name="proxyTargetClass" value="true" />  </bean>  <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">  <property name="securityManager" ref="securityManager"/>  </bean>

三、ShiroRealm文件基本代码

ShiroRealm extends AuthorizingRealm

   /** * 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用. */  @SuppressWarnings("unused")@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection p) {logger.info("授权认证:" + p.getRealmNames());  ShiroUser shiroUser = (ShiroUser)p.getPrimaryPrincipal();  User user = userService.getUserByName(shiroUser.loginName);  SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();for (Role role : user.getRoles()) {//基于用户名的角色信息  info.addRole(role.getName());  //基于角色的权限信息  info.setStringPermissions(role.getPermissions());  }  return info;  }
   /** * 认证回调函数,登录时调用. */  @Override  protected AuthenticationInfo doGetAuthenticationInfo(  AuthenticationToken authcToken) throws AuthenticationException {  logger.info("authc pass:");  UsernamePasswordToken token = (UsernamePasswordToken) authcToken;  logger.info("authc name:" + token.getUsername());  User user = userService.getUserByName(token.getUsername());  if (user != null) {logger.info("authc name:" + token.getUsername() + " user:"  + user.getName() + " pwd:" + user.getPwd() + "getname:" + getName());  return new SimpleAuthenticationInfo(new ShiroUser(user.getName(), user.getName()),                   user.getPwd(), getName());  }  return null;  }

四、User与Role实体(用户关联角色,角色关联权限的关系,个人习惯,可自行配制其他方式)

Userprivate String name;private String pwd;private List<Role> roles;Roleprivate String name;private Set<String> permissions;

五、页面shiro常用标签的使用

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %><shiro:guest>//未登录</shiro:guest><shiro:user>//当前有用户登录<shiro:principal />//当前登录用户名
</shiro:user><shiro:hasRole name="admin">//角色为admin</shiro:hasRole><shiro:hasPermission name="insert">//具有insert权限</shiro:hasPermission>


												

Shiro 与 Spring框架整合基本配制说明相关推荐

  1. 【Java】MyBatis与Spring框架整合(一)

    本文将利用 Spring 对 MyBatis 进行整合,在对组件实现解耦的同时,还能使 MyBatis 框架的使用变得更加方便和简单. 整合思路 作为 Bean 容器,Spring 框架提供了 IoC ...

  2. Spring框架整合JUnit单元测试

    1. 为了简化了JUnit的测试,使用Spring框架也可以整合测试 2. 具体步骤* 要求:必须先有JUnit的环境(即已经导入了JUnit4的开发环境)!!* 步骤一:在程序中引入:spring- ...

  3. struts2+ibatis+spring框架整合(二)

    MyBatis3.1.1+Spring3.1.2+Struts2.3.4.1框架整合 先来看目录结构 来看配置文件 applicationContext.xml <?xml version=&q ...

  4. EasyUI、Struts2、Hibernate、spring 框架整合

    经历了四个月的学习,中间过程曲折离奇,好在坚持下来了,也到了最后框架的整合中间过程也只有自己能体会了. 接下来开始说一下整合中的问题和技巧: 1,  jar包导入 c3p0(2个).jdbc(1个). ...

  5. Shiro集成Spring框架并且多Realms报错No realms have been configured! One or more realms must be ……解决办法

    博主今天在做Shiro集成SpringMVC实现多Reamls的时候,报了No realms have been configured! One or more realms must be --的错 ...

  6. Spring框架整合MyBatis框架

    依赖包 ①Spring核心包 ②Mybatis包 ③Spring中Data Access/intergration层中的JDBC包 ④Spring中spring-tx包 ⑤Spring中aop包 ⑤m ...

  7. Spring框架整合Java Web Token

    Java Web Token JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. JWT组成 一个JWT实际上就是一个字符串, ...

  8. Spring框架整合多数据源 Mysql+oracle

    原项目是mysql数据库,现业务需求新加oracle数据源 引oracle驱动jar包ojdbc6.jar  数据连接池换为druid  新加jar包druid-1.0.15.jar applicat ...

  9. java集成hibernate_JavaWeb_(Spring框架)Spring整合Hibernate

    Dao层类要继承HibernateDaoSupport.java父类 原先使用Hibernate框架hibernate.cfg.xml配置数据库 com.mysql.jdbc.Driver jdbc: ...

最新文章

  1. gcc 从5.3升级到6.1之后 openwrt pkg-config glib编译报错修复办法
  2. 未能找出类型或命名空间名称“T” 问题的解决方案
  3. 修改android studio中的avd sdk路径、avd sdk找不到的解决方案
  4. Jenkins+.Net Core+Git集成发布 - SkyMallCore快速开发平台
  5. Linux内核开发工作方向
  6. 用进程管理的方法进行自我时间管理
  7. Yarn在MapReduce中的工作机制
  8. All-In-One Code Framework [一站式示例代码库] 【转】
  9. ipv4地址是几位二进制数_知识点| ip地址详解,小学生都看的懂
  10. 云管理不是巴别塔 从数据跨入云之路
  11. PHP 自定义 Smarty 模板引擎类 高洛峰 细说PHP
  12. Springboot+多线程+等待获取执行结果
  13. mysql 5.7 连接数_mysql5.7出现大量too many connections及too many open files错误,且配置最大连接数未生效...
  14. simulink单位转换小迈步
  15. OSGeolive 开源GIS 使用
  16. 冰点还原8.57 官方中文版下载
  17. 百度竞价软件测试面试,【百度SEM基础试题】百度推广竞价专员基础知识测试
  18. 第四章——数据库安全性
  19. UVA-714(思维题)
  20. 线性规划 - 数学建模

热门文章

  1. ZCU106开发之SFP
  2. 在 Raspberry Pi (树莓派) 上安装 CMake
  3. linux AT T Assembly
  4. CorelDraw如何将失去的工具箱
  5. 5,10,15,20-四(五氟苯基)卟啉(TF5PPH2);2,3,7,8,12,13,17,18-八氟-5,10,15,20-四(五氟苯基)卟啉(F28TPPH2)齐岳供应
  6. java-使用SImpleDateFormat格式化时间输出
  7. Linux Privilege Escalation Kernel Exploits | Linux本地内核提权漏洞复现 CVE-2015-1328
  8. 项目经理怎么进行绩效考核?
  9. mac php oracle11g,php 与 oracle11g 基本操作
  10. boundary IoU 的计算方式