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.   
  3. import org.apache.shiro.session.Session;  
  4. import org.apache.shiro.session.SessionListener;  
  5. public class CoreSessionListener implements SessionListener {  
  6.     ......  
  7. }  


 

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.   
  8.     <description>Shiro Configuration</description>  
  9.   
  10.     <!-- Shiro's main business-tier object for web-enabled applications -->  
  11.     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
  12.         <property name="realm" ref="shiroDbRealm" />  
  13.         <property name="cacheManager" ref="cacheManager" />  
  14.     </bean>  
  15.   
  16.     <!-- 項目自定义的Realm -->  
  17.     <bean id="shiroDbRealm" class="cn.ssms.realm.ShiroDbRealm">  
  18.         <property name="cacheManager" ref="cacheManager" />  
  19.     </bean>  
  20.   
  21.     <!-- Shiro Filter -->  
  22.     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  23.         <property name="securityManager" ref="securityManager" />  
  24.         <property name="loginUrl" value="/tologin.html" />  
  25.         <property name="successUrl" value="/view/index.html" />  
  26.         <property name="unauthorizedUrl" value="/error/noperms.jsp" />  
  27.         <property name="filterChainDefinitions">  
  28.             <value>  
  29.                 /index.html = authc  
  30.                 /login.html = anon  
  31.                 /tologin.html = anon  
  32.                 /logout.html = anon  
  33.                 /** = authc  
  34.             </value>  
  35.         </property>  
  36.     </bean>  
  37.   
  38.     <!-- 用户授权信息Cache -->  
  39.     <bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" />  
  40.   
  41.     <!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->  
  42.     <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />  
  43.   
  44.     <!-- AOP式方法级权限检查 -->  
  45.     <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"  
  46.         depends-on="lifecycleBeanPostProcessor">  
  47.         <property name="proxyTargetClass" value="true" />  
  48.     </bean>  
  49.   
  50.     <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">  
  51.         <property name="securityManager" ref="securityManager" />  
  52.     </bean>  
  53. </beans>  


Realm类: 

Java代码  SpringMVC + Mybatis + Shiro 权限整合【转】 - zookeeperkafka - zookeeperkafka的博客

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


UserService实现类 

Java代码  收藏代码

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

    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 

    基于Dubbo框架构建分布式服务  (二) - zookeeperkafka - zookeeperkafka的博客

     

    基于Dubbo框架构建分布式服务  (二) - zookeeperkafka - zookeeperkafka的博客

     

    基于Dubbo框架构建分布式服务  (二) - zookeeperkafka - zookeeperkafka的博客

  18. 基于Dubbo框架构建分布式服务  (二) - zookeeperkafka - zookeeperkafka的博客

     

    基于Dubbo框架构建分布式服务  (二) - zookeeperkafka - zookeeperkafka的博客

     

    基于Dubbo框架构建分布式服务  (二) - zookeeperkafka - zookeeperkafka的博客

     

    基于Dubbo框架构建分布式服务  (二) - zookeeperkafka - zookeeperkafka的博客

     

    基于Dubbo框架构建分布式服务  (二) - zookeeperkafka - zookeeperkafka的博客

     

    基于Dubbo框架构建分布式服务  (二) - zookeeperkafka - zookeeperkafka的博客

     

    基于Dubbo框架构建分布式服务  (二) - zookeeperkafka - zookeeperkafka的博客

    基于Dubbo框架构建分布式服务  (二) - zookeeperkafka - zookeeperkafka的博客

转载于:https://my.oschina.net/qiuwenshuo3/blog/754768

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值