SpringMVC + Mybatis + Shiro 权限整合【转】

  1. <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"/>

, 否则controller无法使用注解. 
这个方法可能避免使用sessionValidationScheduler, 就是避免使用, 就能使用高版本的quartz了.

配置会话监听:

Java代码  

  1. package com.pandy.core.security.session;
  2. import org.apache.shiro.session.Session;
  3. import org.apache.shiro.session.SessionListener;
  4. public class CoreSessionListener implements SessionListener {
  5. ......
  6. }

Xml代码  

  1. <!-- 会话管理器 -->
  2. <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
  3. <property name="sessionListeners">
  4. <list>
  5. <bean id="sessionListener" class="com.pandy.core.security.session.CoreSessionListener"/>
  6. </list>
  7. </property>
  8. </bean>

一些配置参考:

Xml代码  

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
  6. default-lazy-init="true">
  7. <description>Shiro Configuration</description>
  8. <!-- Shiro‘s main business-tier object for web-enabled applications -->
  9. <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
  10. <property name="realm" ref="shiroDbRealm" />
  11. <property name="cacheManager" ref="cacheManager" />
  12. </bean>
  13. <!-- 項目自定义的Realm -->
  14. <bean id="shiroDbRealm" class="cn.ssms.realm.ShiroDbRealm">
  15. <property name="cacheManager" ref="cacheManager" />
  16. </bean>
  17. <!-- Shiro Filter -->
  18. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
  19. <property name="securityManager" ref="securityManager" />
  20. <property name="loginUrl" value="/tologin.html" />
  21. <property name="successUrl" value="/view/index.html" />
  22. <property name="unauthorizedUrl" value="/error/noperms.jsp" />
  23. <property name="filterChainDefinitions">
  24. <value>
  25. /index.html = authc
  26. /login.html = anon
  27. /tologin.html = anon
  28. /logout.html = anon
  29. /** = authc
  30. </value>
  31. </property>
  32. </bean>
  33. <!-- 用户授权信息Cache -->
  34. <bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" />
  35. <!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->
  36. <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
  37. <!-- AOP式方法级权限检查 -->
  38. <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
  39. depends-on="lifecycleBeanPostProcessor">
  40. <property name="proxyTargetClass" value="true" />
  41. </bean>
  42. <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
  43. <property name="securityManager" ref="securityManager" />
  44. </bean>
  45. </beans>

Realm类:

Java代码  

  1. package cn.ssms.realm;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. import javax.annotation.PostConstruct;
  5. import org.apache.shiro.authc.AuthenticationException;
  6. import org.apache.shiro.authc.AuthenticationInfo;
  7. import org.apache.shiro.authc.AuthenticationToken;
  8. import org.apache.shiro.authc.IncorrectCredentialsException;
  9. import org.apache.shiro.authc.SimpleAuthenticationInfo;
  10. import org.apache.shiro.authc.UsernamePasswordToken;
  11. import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
  12. import org.apache.shiro.authz.AuthorizationInfo;
  13. import org.apache.shiro.authz.SimpleAuthorizationInfo;
  14. import org.apache.shiro.cache.Cache;
  15. import org.apache.shiro.realm.AuthorizingRealm;
  16. import org.apache.shiro.subject.PrincipalCollection;
  17. import org.apache.shiro.subject.SimplePrincipalCollection;
  18. import org.slf4j.Logger;
  19. import org.slf4j.LoggerFactory;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import cn.ssms.model.User;
  22. import cn.ssms.service.UserService;
  23. import cn.ssms.util.CipherUtil;
  24. import cn.ssms.util.EncryptUtils;
  25. public class ShiroDbRealm extends AuthorizingRealm {
  26. private static Logger logger = LoggerFactory.getLogger(ShiroDbRealm.class);
  27. private static final String ALGORITHM = "MD5";
  28. @Autowired
  29. private UserService userService;
  30. public ShiroDbRealm() {
  31. super();
  32. }
  33. /**
  34. * 认证回调函数, 登录时调用.
  35. */
  36. @Override
  37. protected AuthenticationInfo doGetAuthenticationInfo(
  38. AuthenticationToken authcToken) throws AuthenticationException {
  39. UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
  40. System.out.println(token.getUsername());
  41. User user = userService.findUserByLoginName(token.getUsername());
  42. System.out.println(user);
  43. if (user != null) {
  44. return new SimpleAuthenticationInfo(user.getName(), user.getPassword(), getName());
  45. }else{
  46. throw new AuthenticationException();
  47. }
  48. }
  49. /**
  50. * 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用.
  51. */
  52. @Override
  53. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  54. /* 这里编写授权代码 */
  55. Set<String> roleNames = new HashSet<String>();
  56. Set<String> permissions = new HashSet<String>();
  57. roleNames.add("admin");
  58. roleNames.add("zhangsan");
  59. permissions.add("user.do?myjsp");
  60. permissions.add("login.do?main");
  61. permissions.add("login.do?logout");
  62. SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roleNames);
  63. info.setStringPermissions(permissions);
  64. return info;
  65. }
  66. /**
  67. * 更新用户授权信息缓存.
  68. */
  69. public void clearCachedAuthorizationInfo(String principal) {
  70. SimplePrincipalCollection principals = new SimplePrincipalCollection(principal, getName());
  71. clearCachedAuthorizationInfo(principals);
  72. }
  73. /**
  74. * 清除所有用户授权信息缓存.
  75. */
  76. public void clearAllCachedAuthorizationInfo() {
  77. Cache<Object, AuthorizationInfo> cache = getAuthorizationCache();
  78. if (cache != null) {
  79. for (Object key : cache.keys()) {
  80. cache.remove(key);
  81. }
  82. }
  83. }
  84. //  @PostConstruct
  85. //  public void initCredentialsMatcher() {//MD5加密
  86. //      HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(ALGORITHM);
  87. //      setCredentialsMatcher(matcher);
  88. //  }
  89. }

UserService实现类

Java代码  

  1. @Service("userService")
  2. public class UserServiceImpl implements UserService {
  3. @Autowired
  4. private UserMapper userMapper;
  5. public User getUserById(int id) {
  6. return userMapper.selectByPrimaryKey(id);
  7. }
  8. public User findUserByLoginName(String username) {
  9. System.out.println("findUserByLoginName call!");
  10. return userMapper.findUserByLoginName(username);
  11. }
  12. }
  13. 框架/平台构成:

    Maven+Springmvc + Mybatis + Shiro(权限)+ Tiles(模板) +ActiveMQ(消息队列) + Rest(服务) + WebService(服务)+ EHcache(缓存) + Quartz(定时调度)+ Html5(支持PC、IOS、Android)

    用户权限系统:
    组织结构:角色、用户、用户组、组织机构;权限点:页面、方法、按钮、数据权限、分级授权

    项目管理新体验:
    快速出原型系统、组件树、版本控制、模块移植、协同开发、实时监控、发布管理

    可持续集成:
    所有组件可移植、可定制、可扩充,开发成果不断积累,形成可持续发展的良性循环

    支持平台平台: 
    Windows XP、Windows 7 、Windows 10 、 Linux 、 Unix

    服务器容器:
    Tomcat 5/6/7 、Jetty、JBoss、WebSphere 8.5

时间: 2024-10-10 13:39:02

SpringMVC + Mybatis + Shiro 权限整合【转】的相关文章

模块化服务化原框架整合Springmvc+mybatis+shiro+bootstrap+html5

源码地址获取  1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库访问) 2. 提供高并发JMS消息处理机制3. 所有功能模块化.所有模块服务化.所有服务原子化的方式,提供可拓展的服务模型,使程序稳定运行,永不宕机4. 提供Wink Rest.Webservice服务,故可作为独立服务平台部署 框架整合: Springmvc + Mybatis + Shiro(权限) + RES

【javaWeb框架整合】springmvc+mybatis+shiro+restful+Webservice+bootstrap+html5

开发报捷:增加Lucene搜索引擎功能 1. 创建.初始化索引.统一搜索入口.搜索结果展现--内容.标题高亮.关键词搜索 2. 高级搜索:高级搜索增加多入口查询(精确查询.模糊查询.前缀查询等),每页显示条数自定义.索引结果数据设置.选择索引文档类型等) 集成lucene搜索引擎: 1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库访问) 2. 提供高并发JMS消息处理机制 3.

【企业级框架整合源码】maven+Springmvc+Mybatis+Shiro+REST+WebService+JMS+Lucene+Bootstrap

开发报捷:增加Lucene搜索引擎功能 1. 创建.初始化索引.统一搜索入口.搜索结果展现--内容.标题高亮.关键词搜索 2. 高级搜索:高级搜索增加多入口查询(精确查询.模糊查询.前缀查询等),每页显示条数自定义.索引结果数据设置.选择索引文档类型等) 集成lucene搜索引擎: 1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库访问) 2. 提供高并发JMS消息处理机制 3.

【SSM框架整合】maven+Springmvc+Mybatis+Shiro+REST+WebService+JMS+Lucene+Bootstrap

开发报捷:增加Lucene搜索引擎功能 1. 创建.初始化索引.统一搜索入口.搜索结果展现--内容.标题高亮.关键词搜索 2. 高级搜索:高级搜索增加多入口查询(精确查询.模糊查询.前缀查询等),每页显示条数自定义.索引结果数据设置.选择索引文档类型等) 集成lucene搜索引擎: 1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库访问) 2. 提供高并发JMS消息处理机制 3.

java最新框架整合 springmvc+mybatis+shiro+maven 代码生成器

1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库访问) 2. 提供高并发JMS消息处理机制 3. 所有功能模块化.所有模块服务化.所有服务原子化的方式,提供可拓展的服务模型,使程序稳定运行,永不宕机 4. 提供Wink Rest.Webservice服务,故可作为独立服务平台部署 框架整合: Springmvc + Mybatis + Shiro(权限) + REST(服务)

【高并发 大数据框架整合】Springmvc+mybatis+shiro+lucene+rest+webservice+maven

1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库访问) 2. 提供高并发JMS消息处理机制 3. 所有功能模块化.所有模块服务化.所有服务原子化的方式,提供可拓展的服务模型,使程序稳定运行,永不宕机 4. 提供Wink Rest.Webservice服务,故可作为独立服务平台部署 框架整合: Springmvc + Mybatis + Shiro(权限) + REST(服务)

java框架整合Springmvc+mybatis+shiro+lucene+rest+webservice+maven

1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库访问) 2. 提供高并发JMS消息处理机制 3. 所有功能模块化.所有模块服务化.所有服务原子化的方式,提供可拓展的服务模型,使程序稳定运行,永不宕机 4. 提供Wink Rest.Webservice服务,故可作为独立服务平台部署 框架整合: Springmvc + Mybatis + Shiro(权限) + REST(服务)

JavaEE springmvc,mybatis,shiro,bootstrap,html5框架整合

升级报捷:通过服务于服务之间调用,生成二维码,可直接用户手机app(详细查看截图) 框架集成lucene搜索引擎,使您的信息在毫秒内抓取(详细查看截图) 1.  创建.初始化索引.统一搜索入口.搜索结果展现--内容.标题高亮.关键词搜索 2.  高级搜索:高级搜索增加多入口查询(精确查询.模糊查询.前缀查询等),每页显示条数自定义.索引结果数据设置.选择索引文档类型等 3. 通过A系统调用B系统的Rest服务,生成相关的二维码,可以直接用户手机app ----------------------

【java高并发 大数据企业架构框架整合】Springmvc+mybatis+shiro+lucene+rest+webservice+maven

1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库访问) 2. 提供高并发JMS消息处理机制 3. 所有功能模块化.所有模块服务化.所有服务原子化的方式,提供可拓展的服务模型,使程序稳定运行,永不宕机 4. 提供Wink Rest.Webservice服务,故可作为独立服务平台部署 框架整合: Springmvc + Mybatis + Shiro(权限) + REST(服务)