Spring Boot学習共有(二)-MyBatis+Shiroを統合
31866 ワード
MyBatisとShiroの統合
依然としてmaven管理プロジェクトpom.xmlを使用
mybatisの統合は非常に簡単で、アプリケーション.ymlファイルに直接追加すればいいです.
shiroの統合には@Configurationラベルを使用してクラスを登録する必要があります(@Configurationはspring.xmlのラベルに相当します)、さらに@Beanで各種エンティティクラス(@Beanは相当)ShiroConfiguration.classを登録します
まとめ:spring boot統合の他のフレームワークは、実際にはspringで使用されるxmlファイルの注釈を使用してクラスに変換し、自動構成を実現します.
依然として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ファイルの注釈を使用してクラスに変換し、自動構成を実現します.