Spring Boot学習共有(二)-MyBatis+Shiroを統合


MyBatisとShiroの統合
依然としてmaven管理プロジェクトpom.xmlを使用
<shiro.version>1.3.0shiro.version>

		<dependency>
			<groupId>org.apache.shirogroupId>
			<artifactId>shiro-coreartifactId>
			<version>${shiro.version}version>
		dependency>
		<dependency>
			<groupId>org.apache.shirogroupId>
			<artifactId>shiro-ehcacheartifactId>
			<version>${shiro.version}version>
		dependency>
		<dependency>
			<groupId>org.apache.shirogroupId>
			<artifactId>shiro-springartifactId>
			<version>${shiro.version}version>
		dependency>

		<dependency>
			<groupId>org.apache.shirogroupId>
			<artifactId>shiro-webartifactId>
			<version>${shiro.version}version>
		dependency>
		
		
		
		<dependency>
			<groupId>net.sf.ehcachegroupId>
			<artifactId>ehcache-coreartifactId>
			<version>2.4.8version>
		dependency>


mybatisの統合は非常に簡単で、アプリケーション.ymlファイルに直接追加すればいいです.
spring: 
<!--      -->
  datasource: 
    url: jdbc:mysql://localhost/student?useUnicode=true&characterEncoding=UTF-8&useSSL=true
    username:     
    password: 
    driver-class-name: com.mysql.jdbc.Driver
<!-- mybatis   -->
mybatis:
<!-- mybatis  mapper   xml -->
  mapper-locations: classpath:mapper/*.xml
  
  type-aliases-package: com.example.demo.domain

shiroの統合には@Configurationラベルを使用してクラスを登録する必要があります(@Configurationはspring.xmlのラベルに相当します)、さらに@Beanで各種エンティティクラス(@Beanは相当)ShiroConfiguration.classを登録します
/**
 * @author MDY
 * shiro      
 */
@Configuration
public class ShiroConfiguration {

	//      
	@Bean(name = "shiroFilter")
	public ShiroFilterFactoryBean shiroFilter(@Qualifier("securityManager") SecurityManager manager) {
		// shiro    
		ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
		//       
		// Map filter = new HashMap();
		// bean.setFilters(filter);
		//      
		bean.setSecurityManager(manager);
		//       ,        
		//      url      url
		bean.setLoginUrl("/login");
		bean.setSuccessUrl("/home");
		bean.setUnauthorizedUrl("/login?error=unidentified");
		//       
		LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
		//   
		filterChainDefinitionMap.put("/login", "anon");
		filterChainDefinitionMap.put("/UserLogin**", "anon");
		//      
		filterChainDefinitionMap.put("/setImage**", "anon");
		//     
		filterChainDefinitionMap.put("/register", "anon");
		filterChainDefinitionMap.put("/registerUser**", "anon");
		//     
		filterChainDefinitionMap.put("/css/**", "anon");
		filterChainDefinitionMap.put("/js/**", "anon");
		filterChainDefinitionMap.put("/img/**", "anon");
		//   
		filterChainDefinitionMap.put("/logout", "logout");
		//             
		filterChainDefinitionMap.put("/manager**", "roles[teacher]");
		filterChainDefinitionMap.put("/manager/delStudent**", "roles[admin]");
		// rememberME    
		filterChainDefinitionMap.put("/**", "user");
		bean.setFilterChainDefinitionMap(filterChainDefinitionMap);
		return bean;
	}

	//            
	@Bean(name = "securityManager")
	public SecurityManager securityManager(@Qualifier("myRealm") MyRealm myRealm,
			@Qualifier("rememberMeManager") CookieRememberMeManager rememberMeManager) {
		DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
		manager.setRealm(myRealm);
		manager.setRememberMeManager(rememberMeManager);
		return manager;
	}

	//            
	@Bean(name = "myRealm")
	public MyRealm myRealm(@Qualifier("credentialsMatcher") CredentialsMatcher matcher) {
		MyRealm myRealm = new MyRealm();
		myRealm.setCredentialsMatcher(matcher);
		return myRealm;
	}

	//            
	@Bean(name = "credentialsMatcher")
	public CredentialsMatcher credentialsMatcher(@Qualifier("cacheManager") CacheManager cacheManager) {
		RetryLimitHashedCredentialsMatcher retryLimitHashedCredentialsMatcher = new RetryLimitHashedCredentialsMatcher(
				cacheManager);
		retryLimitHashedCredentialsMatcher.setHashAlgorithmName("MD5");
		retryLimitHashedCredentialsMatcher.setStoredCredentialsHexEncoded(true);
		retryLimitHashedCredentialsMatcher.setHashIterations(2);
		return retryLimitHashedCredentialsMatcher;
	}

	//      
	@Bean(name = "cacheManager")
	public CacheManager cacheManager() {
		EhCacheManager cacheManager = new EhCacheManager();
		cacheManager.setCacheManagerConfigFile("classpath:shiro/ehcache.xml");
		return cacheManager;
	}

	//   Cookie  
	@Bean(name = "sessionIdCookie")
	public SimpleCookie sessionIdCookie() {
		SimpleCookie sessionIdCookie = new SimpleCookie("sid");
		sessionIdCookie.setHttpOnly(true);
		sessionIdCookie.setMaxAge(-1);
		return sessionIdCookie;
	}

	@Bean(name = "rememberMeCookie")
	public SimpleCookie rememberMeCookie() {
		SimpleCookie rememberMeCookie = new SimpleCookie("rememberMe");
		rememberMeCookie.setHttpOnly(true);
		rememberMeCookie.setMaxAge(604800);
		return rememberMeCookie;
	}

	// RememberMe   
	@Bean(name = "rememberMeManager")
	public CookieRememberMeManager rememberMeManager(@Qualifier("rememberMeCookie") SimpleCookie rememberMeCookie) {
		CookieRememberMeManager rememberMeManager = new CookieRememberMeManager();
		rememberMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag=="));
		rememberMeManager.setCookie(rememberMeCookie);
		return rememberMeManager;
	}

	@Bean
	public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
		return new LifecycleBeanPostProcessor();
	}

	@Bean
	public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
		DefaultAdvisorAutoProxyCreator creator = new DefaultAdvisorAutoProxyCreator();
		creator.setProxyTargetClass(true);
		return creator;
	}

	@Bean
	public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(
			@Qualifier("securityManager") SecurityManager manager) {
		AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
		advisor.setSecurityManager(manager);
		return advisor;
	}
}

まとめ:spring boot統合の他のフレームワークは、実際にはspringで使用されるxmlファイルの注釈を使用してクラスに変換し、自動構成を実現します.