文档章节

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

 管理仍
发布于 2016/10/11 18:05
字数 773
阅读 15
收藏 2
  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的博客

© 著作权归作者所有

粉丝 11
博文 39
码字总数 82524
作品 0
深圳
私信 提问
加载中

评论(1)

管理仍
SpringMvc + Shiro[数据库存权限] 配置 ;[附git.oschina的项目地址]

一 shiro简介 apache shiro 是功能强大并且容易集成的开源权限框架,它能够完成认证、授权、加密、会话管理等功能。认证和授权为权限控制的核心,简单来说,“认证”就是证明“你是谁?” We...

王庭
2015/10/28
0
3
分布式系统 - iBase4J

Spring boot,Spring,SpringMVC,Mybatis,mybatis-plus,motan/dubbo分布式,Redis缓存,Shiro权限管理,Spring-Session单点登录,Quartz分布式集群调度,Restful服务,QQ/微信登录,App t...

iBase4J
2016/05/04
0
74
Idea SpringMVC+Spring+MyBatis+Maven调整 【转】

创建项目 File-New Project 选中左侧的Maven,选中右侧上方的Create from archetype,然后选中下方列表中的webapp,然后点击Next 在GroupId和ArtifactId中填入指定内容,点击Next 直接点Nex...

结构好可
2016/10/27
58
1
Idea SpringMVC+Spring+MyBatis+Maven调整 【转】

创建项目 File-New Project 选中左侧的Maven,选中右侧上方的Create from archetype,然后选中下方列表中的webapp,然后点击Next 在GroupId和ArtifactId中填入指定内容,点击Next 直接点Nex...

梵蒂冈考虑过
2016/09/20
14
0
Idea SpringMVC+Spring+MyBatis+Maven调整 【转】

创建项目 File-New Project 选中左侧的Maven,选中右侧上方的Create from archetype,然后选中下方列表中的webapp,然后点击Next 在GroupId和ArtifactId中填入指定内容,点击Next 直接点Nex...

如何让他和
2016/10/04
61
1

没有更多内容

加载失败,请刷新页面

加载更多

Java编程学习-Java虚拟机(JVM)以及跨平台原理

相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的。 那么,跨平台是怎样实现的呢?这...

Java领航员
24分钟前
0
0
学JFinal不迷路,JFinal优质资源列表(欢迎反馈更新)

学JFinal不迷路,记录一下JFinal相关的资源、产品、讲师等信息(所有信息排名不分先后)。 一、相关站点: 1、JFinal官网-问答、分享、文档、交流、俱乐部 http://www.jfinal.com 2 、JFina...

山东-小木
28分钟前
0
0
项目学习(2)-order-job

在当前的系统中,因为并发量并不高,服务之间发起异步请求或者异步调用时,没有使用到消息中间件。 而是在各个服务(子系统)的数据库中,创建了event_queue事件对列表和event_handler事件处...

太猪-YJ
36分钟前
0
0
gradle grovvy中的闭包

1. 无参数的闭包 //这b1就是一个闭包def b1={ println "hello b1"}//定义方法,包含闭包类型的参数def method1(Closure closure){closure()}//执行method1method1(b1) 执行结果 ...

edison_kwok
今天
3
0
基于Spring Boot + Dubbo的全链路日志追踪(一)

一、 概要 当前公司后端整体架构为:Spring Boot + Dubbo。由于早期项目进度等原因,对日志这块没有统一的规范,基本上是每个项目自己管自己的日志。这也对后面的问题排查带来了很大的困难,...

明天以后
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部