From b59d4219d24917e3fb77f85a615a23abb2c0c5bd Mon Sep 17 00:00:00 2001
From: administrator <2316696377@qq.com>
Date: Fri, 25 Sep 2020 19:04:24 +0800
Subject: [PATCH] =?UTF-8?q?shiro=E4=BD=BF=E7=94=A8started=E4=BE=9D?=
=?UTF-8?q?=E8=B5=96=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 11 +--
.../src/main/resources/application.yml | 10 +-
ruoyi-common/pom.xml | 10 +-
ruoyi-framework/pom.xml | 6 --
.../ruoyi/framework/config/CacheConfig.java | 4 +-
.../ruoyi/framework/config/ShiroConfig.java | 91 ++++++++-----------
6 files changed, 58 insertions(+), 74 deletions(-)
diff --git a/pom.xml b/pom.xml
index 7a573e8f4..f788d65da 100644
--- a/pom.xml
+++ b/pom.xml
@@ -64,14 +64,7 @@
org.apache.shiro
- shiro-core
- ${shiro.version}
-
-
-
-
- org.apache.shiro
- shiro-spring
+ shiro-spring-boot-starter
${shiro.version}
@@ -81,7 +74,7 @@
shiro-ehcache
${shiro.version}
-
+
com.github.theborakompanioni
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index fb430e687..9ca3a2663 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -93,6 +93,8 @@ spring:
max-idle: 8
min-idle: 2
max-wait: -1
+ application:
+ name: framework
# Shiro
shiro:
user:
@@ -146,10 +148,10 @@ swagger:
cache:
names:
sys_dict_type:
- ttl: PT1M
+ ttl: PT10M
sys_user:
- ttl: PT1M
+ ttl: PT10M
sys_post:
- ttl: PT1M
+ ttl: PT10M
sys_role:
- ttl: PT1M
\ No newline at end of file
+ ttl: PT10M
\ No newline at end of file
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 356da02d7..60fb56bd8 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -32,15 +32,19 @@
org.apache.shiro
- shiro-core
+ shiro-spring-boot-starter
-
-
+
org.apache.shiro
shiro-ehcache
+
+ com.github.theborakompanioni
+ thymeleaf-extras-shiro
+
+
javax.validation
diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml
index 7eca4c760..778824867 100644
--- a/ruoyi-framework/pom.xml
+++ b/ruoyi-framework/pom.xml
@@ -48,12 +48,6 @@
-
-
- org.apache.shiro
- shiro-spring
-
-
com.github.theborakompanioni
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CacheConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CacheConfig.java
index f3efb17d1..c0b754c2e 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CacheConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CacheConfig.java
@@ -9,6 +9,7 @@ import com.ruoyi.common.properties.CacheProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.cache.CacheManager;
+import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -27,7 +28,7 @@ import java.util.Map;
@EnableCaching
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
-public class CacheConfig {
+public class CacheConfig extends CachingConfigurerSupport {
@Autowired
private RedisConnectionFactory factory;
@@ -42,6 +43,7 @@ public class CacheConfig {
}
@Bean
+ @Override
public CacheManager cacheManager() {
RedisCacheConfiguration defaultConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.disableCachingNullValues()
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
index ff7a52326..dc5f14c92 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
@@ -6,6 +6,7 @@ import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.Filter;
+
import org.apache.commons.io.IOUtils;
import org.apache.shiro.cache.ehcache.EhCacheManager;
import org.apache.shiro.codec.Base64;
@@ -17,6 +18,7 @@ import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.CookieRememberMeManager;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.SimpleCookie;
+import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
@@ -34,15 +36,16 @@ import com.ruoyi.framework.shiro.web.filter.sync.SyncOnlineSessionFilter;
import com.ruoyi.framework.shiro.web.session.OnlineWebSessionManager;
import com.ruoyi.framework.shiro.web.session.SpringSessionValidationScheduler;
import at.pollux.thymeleaf.shiro.dialect.ShiroDialect;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
/**
* 权限配置加载
- *
+ *
* @author ruoyi
*/
@Configuration
-public class ShiroConfig
-{
+public class ShiroConfig {
public static final String PREMISSION_STRING = "perms[\"{0}\"]";
/**
@@ -127,17 +130,13 @@ public class ShiroConfig
* 缓存管理器 使用Ehcache实现
*/
@Bean
- public EhCacheManager getEhCacheManager()
- {
+ public EhCacheManager getEhCacheManager() {
net.sf.ehcache.CacheManager cacheManager = net.sf.ehcache.CacheManager.getCacheManager("ruoyi");
EhCacheManager em = new EhCacheManager();
- if (StringUtils.isNull(cacheManager))
- {
+ if (StringUtils.isNull(cacheManager)) {
em.setCacheManager(new net.sf.ehcache.CacheManager(getCacheManagerConfigFileInputStream()));
return em;
- }
- else
- {
+ } else {
em.setCacheManager(cacheManager);
return em;
}
@@ -146,24 +145,18 @@ public class ShiroConfig
/**
* 返回配置文件流 避免ehcache配置文件一直被占用,无法完全销毁项目重新部署
*/
- protected InputStream getCacheManagerConfigFileInputStream()
- {
+ protected InputStream getCacheManagerConfigFileInputStream() {
String configFile = "classpath:ehcache/ehcache-shiro.xml";
InputStream inputStream = null;
- try
- {
+ try {
inputStream = ResourceUtils.getInputStreamForPath(configFile);
byte[] b = IOUtils.toByteArray(inputStream);
InputStream in = new ByteArrayInputStream(b);
return in;
- }
- catch (IOException e)
- {
+ } catch (IOException e) {
throw new ConfigurationException(
"Unable to obtain input stream for cacheManagerConfigFile [" + configFile + "]", e);
- }
- finally
- {
+ } finally {
IOUtils.closeQuietly(inputStream);
}
}
@@ -172,8 +165,7 @@ public class ShiroConfig
* 自定义Realm
*/
@Bean
- public UserRealm userRealm(EhCacheManager cacheManager)
- {
+ public UserRealm userRealm(EhCacheManager cacheManager) {
UserRealm userRealm = new UserRealm();
userRealm.setCacheManager(cacheManager);
return userRealm;
@@ -183,8 +175,7 @@ public class ShiroConfig
* 自定义sessionDAO会话
*/
@Bean
- public OnlineSessionDAO sessionDAO()
- {
+ public OnlineSessionDAO sessionDAO() {
OnlineSessionDAO sessionDAO = new OnlineSessionDAO();
return sessionDAO;
}
@@ -193,8 +184,7 @@ public class ShiroConfig
* 自定义sessionFactory会话
*/
@Bean
- public OnlineSessionFactory sessionFactory()
- {
+ public OnlineSessionFactory sessionFactory() {
OnlineSessionFactory sessionFactory = new OnlineSessionFactory();
return sessionFactory;
}
@@ -203,8 +193,7 @@ public class ShiroConfig
* 会话管理器
*/
@Bean
- public OnlineWebSessionManager sessionManager()
- {
+ public OnlineWebSessionManager sessionManager() {
OnlineWebSessionManager manager = new OnlineWebSessionManager();
// 加入缓存管理器
manager.setCacheManager(getEhCacheManager());
@@ -229,8 +218,7 @@ public class ShiroConfig
* 安全管理器
*/
@Bean
- public SecurityManager securityManager(UserRealm userRealm)
- {
+ public DefaultWebSecurityManager securityManager(UserRealm userRealm) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// 设置realm.
securityManager.setRealm(userRealm);
@@ -246,8 +234,7 @@ public class ShiroConfig
/**
* 退出过滤器
*/
- public LogoutFilter logoutFilter()
- {
+ public LogoutFilter logoutFilter() {
LogoutFilter logoutFilter = new LogoutFilter();
logoutFilter.setLoginUrl(loginUrl);
return logoutFilter;
@@ -257,8 +244,7 @@ public class ShiroConfig
* Shiro过滤器配置
*/
@Bean
- public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager)
- {
+ public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
// Shiro的核心安全接口,这个属性是必须的
shiroFilterFactoryBean.setSecurityManager(securityManager);
@@ -308,8 +294,7 @@ public class ShiroConfig
* 自定义在线用户处理过滤器
*/
@Bean
- public OnlineSessionFilter onlineSessionFilter()
- {
+ public OnlineSessionFilter onlineSessionFilter() {
OnlineSessionFilter onlineSessionFilter = new OnlineSessionFilter();
onlineSessionFilter.setLoginUrl(loginUrl);
return onlineSessionFilter;
@@ -319,8 +304,7 @@ public class ShiroConfig
* 自定义在线用户同步过滤器
*/
@Bean
- public SyncOnlineSessionFilter syncOnlineSessionFilter()
- {
+ public SyncOnlineSessionFilter syncOnlineSessionFilter() {
SyncOnlineSessionFilter syncOnlineSessionFilter = new SyncOnlineSessionFilter();
return syncOnlineSessionFilter;
}
@@ -329,8 +313,7 @@ public class ShiroConfig
* 自定义验证码过滤器
*/
@Bean
- public CaptchaValidateFilter captchaValidateFilter()
- {
+ public CaptchaValidateFilter captchaValidateFilter() {
CaptchaValidateFilter captchaValidateFilter = new CaptchaValidateFilter();
captchaValidateFilter.setCaptchaEnabled(captchaEnabled);
captchaValidateFilter.setCaptchaType(captchaType);
@@ -340,8 +323,7 @@ public class ShiroConfig
/**
* cookie 属性设置
*/
- public SimpleCookie rememberMeCookie()
- {
+ public SimpleCookie rememberMeCookie() {
SimpleCookie cookie = new SimpleCookie("rememberMe");
cookie.setDomain(domain);
cookie.setPath(path);
@@ -353,8 +335,7 @@ public class ShiroConfig
/**
* 记住我
*/
- public CookieRememberMeManager rememberMeManager()
- {
+ public CookieRememberMeManager rememberMeManager() {
CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
cookieRememberMeManager.setCookie(rememberMeCookie());
cookieRememberMeManager.setCipherKey(Base64.decode(cipherKey));
@@ -364,8 +345,7 @@ public class ShiroConfig
/**
* 同一个用户多设备登录限制
*/
- public KickoutSessionFilter kickoutSessionFilter()
- {
+ public KickoutSessionFilter kickoutSessionFilter() {
KickoutSessionFilter kickoutSessionFilter = new KickoutSessionFilter();
kickoutSessionFilter.setCacheManager(getEhCacheManager());
kickoutSessionFilter.setSessionManager(sessionManager());
@@ -382,8 +362,7 @@ public class ShiroConfig
* thymeleaf模板引擎和shiro框架的整合
*/
@Bean
- public ShiroDialect shiroDialect()
- {
+ public ShiroDialect shiroDialect() {
return new ShiroDialect();
}
@@ -391,11 +370,21 @@ public class ShiroConfig
* 开启Shiro注解通知器
*/
@Bean
- public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(
- @Qualifier("securityManager") SecurityManager securityManager)
- {
+ public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor( @Qualifier("securityManager") SecurityManager securityManager) {
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}
+
+ /**
+ * 下面的代码是添加注解支持
+ */
+ @Bean
+ public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
+ DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
+ // 强制使用cglib,防止重复代理和可能引起代理出错的问题
+ // https://zhuanlan.zhihu.com/p/29161098
+ defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
+ return defaultAdvisorAutoProxyCreator;
+ }
}