最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springBoot整合shiro如何解決讀取不到@value值問題

 更新時間:2023年08月25日 09:23:10   作者:hzau_itdog  
這篇文章主要介紹了springBoot整合shiro如何解決讀取不到@value值問題,具有很好的參考價值,希望對大家有所幫助,

springBoot整合shiro讀取不到@value值

1、通過@value將值注入shiroconfigure靜態(tài)屬性

    private static String dropmenu_post;
	@Value("${dropmenu.post}")
	public void setDropmenu_post(String dropmenu_post) {
		ShiroConfig.dropmenu_post = dropmenu_post;
	}

2、將LifecycleBeanPostProcessor獲取該對象的方法設(shè)為靜態(tài)

    @Bean
	public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
		return new LifecycleBeanPostProcessor();
	}

 3、使用

@Bean(name = "shiroFilter")
	public ShiroFilterFactoryBean getShiroFilterFactoryBean(
			@Qualifier("securityManager") SecurityManager securityManager) {
		ShiroFilterFactoryBean sfb = new ShiroFilterFactoryBean();
		sfb.setSecurityManager(securityManager);
		sfb.setLoginUrl(ShiroConfig.dropmenu_post + "/login");
		sfb.setSuccessUrl("/report/list");
		sfb.setUnauthorizedUrl("/goLogin");
		Map<String, Filter> filters = new HashMap<>();
		filters.put("per", getPermissionFilter());
		// filters.put("verCode",getVerfityCodeFilter());
		sfb.setFilters(filters);
		Map<String, String> filterMap = new LinkedHashMap<>();
		filterMap.put("/resources/**", "anon");
		filterMap.put("/fx/**", "anon");
		filterMap.put("/fx2/**", "anon");
		filterMap.put("/process/**", "anon");
		filterMap.put("/repeat/**", "anon");
		filterMap.put("/repeat2/**", "anon");
		filterMap.put("/ipad/**", "anon");
		filterMap.put("/student/**", "anon");
		filterMap.put("/excel/**", "anon");
		filterMap.put("/exam/**", "anon");
		filterMap.put("/progress/**", "anon");
		filterMap.put("/param/**", "anon");
		filterMap.put("/statics/**", "anon");
		filterMap.put("/download/**", "anon");
		filterMap.put("/knowledge/**", "anon");
		filterMap.put("/login", "anon");
		filterMap.put("/actuator/**", "anon");
		filterMap.put("/hystrix", "anon");
		filterMap.put("/hystrix.stream", "anon");
		filterMap.put("/logout", "logout");
		filterMap.put("/js/**", "anon");
		filterMap.put("/css/**", "anon");
		filterMap.put("/user/**", "per");
		filterMap.put("/**", "authc");
		sfb.setFilterChainDefinitionMap(filterMap);
		return sfb;
	}

整個類的代碼如下 

package com.whty.hxx.config;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.servlet.Filter;
import org.apache.shiro.authc.credential.HashedCredentialsMatcher;
import org.apache.shiro.cache.ehcache.EhCacheManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.Cookie;
import org.apache.shiro.web.servlet.ShiroHttpSession;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.DelegatingFilterProxy;
import com.whty.hxx.common.filter.PermissionFilter;
import com.whty.hxx.common.shiro.LoginRealm;
import com.whty.hxx.common.shiro.MyWebSessionManager;
import com.whty.hxx.common.shiro.ShiroUtil;
import com.whty.hxx.common.shiro.redis.RedisSessionDAO;
import com.whty.hxx.common.shiro.redis.ShiroRedisCacheManager;
import lombok.extern.slf4j.Slf4j;
/**
 * @author yym
 * @date 2018/5/31. spring shiro 配置
 */
@Configuration
@Slf4j
public class ShiroConfig {
	private static String dropmenu_post;
	@Value("${dropmenu.post}")
	public void setDropmenu_post(String dropmenu_post) {
		ShiroConfig.dropmenu_post = dropmenu_post;
	}
	@Bean(value = "ehCacheManager")
	public EhCacheManager ehCacheManager() {
		EhCacheManager ehCacheManager = new EhCacheManager();
		ehCacheManager.setCacheManagerConfigFile("classpath:ehcache/ehcache.xml");
		return ehCacheManager;
	}
	// @Bean(name="credentialsMatcher")
	// public RetryLimitCredentialsMatcher
	// getRetryLimitCredentialsMatcher(@Qualifier("redisCacheManager")
	// ShiroSpringCacheManager redisCacheManager){
	 RetryLimitCredentialsMatcher rm = new
	// RetryLimitCredentialsMatcher(getCacheManager(),2);
	// RetryLimitCredentialsMatcher rm = new
	// RetryLimitCredentialsMatcher(redisCacheManager);
	// rm.setHashAlgorithmName("md5");
	// rm.setHashIterations(4);
	// return rm;
	//
	// }
	// @Bean(name = "redisCacheManager")
	// public ShiroRedisCacheManager redisCacheManager() {
	// log.debug("ShiroConfiguration.redisCacheManager()");
	// return new ShiroRedisCacheManager();
	// }
	@Bean(name = "redisSessionDAO")
	public RedisSessionDAO redisSessionDAO() {
		log.debug("ShiroConfiguration.redisSessionDAO()");
		return new RedisSessionDAO();
	}
	@Bean(name = "loginRealm")
	public LoginRealm getLoginRealm(@Qualifier("redisCacheManager") ShiroRedisCacheManager redisCacheManager) {
		LoginRealm realm = new LoginRealm();
		// 密碼匹配校驗??
		HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher();
		credentialsMatcher.setHashAlgorithmName("md5");
		credentialsMatcher.setHashIterations(4);
		realm.setCredentialsMatcher(credentialsMatcher);
		realm.setCacheManager(redisCacheManager);
		// realm.setCachingEnabled(true);
		return realm;
	}
	@Bean
	public static LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {
		return new LifecycleBeanPostProcessor();
	}
	// /**
	// *
	// * enterCacheSessionDAO:(EnterpriseCacheSessionDAO shiro sessionDao層的實現(xiàn)??).
	// <br/>
	// * 提供了緩存功能的會話維護,默認(rèn)情況下使用MapCache實現(xiàn),內(nèi)部使用ConcurrentHashMap保存緩存的會話???.<br/>
	// *
	// * @author verywell
	// * @return
	// * @since JDK 1.8
	// */
	// @Bean(name="redisCacheSessionDAO")
	// public RedisSessionDao
	// getEnterCacheSessionDAO(@Qualifier("redisCacheManager")
	// ShiroSpringCacheManager redisCacheManager) {
	// RedisSessionDao enterCacheSessionDAO = new RedisSessionDao();
	// //添加緩存管理??
	// enterCacheSessionDAO.setCacheManager(redisCacheManager);
	 添加ehcache活躍緩存名稱(必須和ehcache緩存名稱??致)
	 enterCacheSessionDAO.setActiveSessionsCacheName("shiro-activeSessionCache");
	// return enterCacheSessionDAO;
	// }
	// @Bean(name="sessionValidationScheduler")
	// public MyQuartzSessionValidationScheduler
	// getQuartzSessionValidationScheduler(@Qualifier("redisSessionDAO")RedisSessionDAO
	// sessionDAO
	// ,@Qualifier("redisCacheManager") ShiroRedisCacheManager redisCacheManager) {
	// MyQuartzSessionValidationScheduler sessionValidationScheduler = new
	// MyQuartzSessionValidationScheduler();
	// sessionValidationScheduler.setSessionValidationInterval(10000);
	// DefaultWebSessionManager sessionManager=new DefaultWebSessionManager();
	// sessionManager.setCacheManager(redisCacheManager);
	// sessionManager.setSessionDAO(sessionDAO);
	// sessionValidationScheduler.setSessionManager(sessionManager);
	// return sessionValidationScheduler;
	// }
	@Bean(name = "sessionManager")
	public DefaultWebSessionManager getSessionManager(@Qualifier("redisSessionDAO") RedisSessionDAO sessionDAO,
			@Qualifier("redisCacheManager") ShiroRedisCacheManager cacheManager) {
		MyWebSessionManager sessionManager = new MyWebSessionManager();
		sessionManager.setSessionIdUrlRewritingEnabled(false);// sessionId不顯示在url??
		sessionManager.setCacheManager(cacheManager);
		sessionManager.setSessionDAO(sessionDAO);
		// sessionManager.setGlobalSessionTimeout(2000);
		// sessionManager.setSessionValidationScheduler(sessionValidationScheduler);
		// sessionManager.setSessionValidationInterval(3000);
		// 創(chuàng)建會話Cookie
		Cookie cookie = new SimpleCookie(ShiroHttpSession.DEFAULT_SESSION_ID_NAME);
		cookie.setName(ShiroUtil.name_serssionId);
		cookie.setHttpOnly(true);
		sessionManager.setSessionIdCookie(cookie);
		return sessionManager;
	}
	@Bean(name = "securityManager")
	public SecurityManager getSecurityManager(@Qualifier("loginRealm") LoginRealm loginRealm,
			@Qualifier("sessionManager") DefaultWebSessionManager sessionManager,
			@Qualifier("redisCacheManager") ShiroRedisCacheManager cacheManager) {
		DefaultWebSecurityManager dwm = new DefaultWebSecurityManager();
		dwm.setRealm(loginRealm);
		// dwm.setCacheManager(cacheManager);
		dwm.setSessionManager(sessionManager);
		return dwm;
	}
	@Bean
	public PermissionFilter getPermissionFilter() {
		PermissionFilter pf = new PermissionFilter();
		return pf;
	}
	// @Bean
	// public VerfityCodeFilter getVerfityCodeFilter(){
	// VerfityCodeFilter vf= new VerfityCodeFilter();
	// vf.setFailureKeyAttribute("shiroLoginFailure");
	// vf.setJcaptchaParam("code");
	// vf.setVerfitiCode(true);
	// return vf;
	// }
	@Bean(name = "shiroFilter")
	public ShiroFilterFactoryBean getShiroFilterFactoryBean(
			@Qualifier("securityManager") SecurityManager securityManager) {
		ShiroFilterFactoryBean sfb = new ShiroFilterFactoryBean();
		sfb.setSecurityManager(securityManager);
		sfb.setLoginUrl(ShiroConfig.dropmenu_post + "/login");
		sfb.setSuccessUrl("/report/list");
		sfb.setUnauthorizedUrl("/goLogin");
		Map<String, Filter> filters = new HashMap<>();
		filters.put("per", getPermissionFilter());
		// filters.put("verCode",getVerfityCodeFilter());
		sfb.setFilters(filters);
		Map<String, String> filterMap = new LinkedHashMap<>();
		filterMap.put("/resources/**", "anon");
		filterMap.put("/fx/**", "anon");
		filterMap.put("/fx2/**", "anon");
		filterMap.put("/process/**", "anon");
		filterMap.put("/repeat/**", "anon");
		filterMap.put("/repeat2/**", "anon");
		filterMap.put("/ipad/**", "anon");
		filterMap.put("/student/**", "anon");
		filterMap.put("/excel/**", "anon");
		filterMap.put("/exam/**", "anon");
		filterMap.put("/progress/**", "anon");
		filterMap.put("/param/**", "anon");
		filterMap.put("/statics/**", "anon");
		filterMap.put("/download/**", "anon");
		filterMap.put("/knowledge/**", "anon");
		// //===== 測試
		// filterMap.put("/test/**","anon");
		// filterMap.put("/report/**","anon");
		// filterMap.put("/upload/**","anon");
		// filterMap.put("/city/**","anon");
		// filterMap.put("/county/**","anon");
		// filterMap.put("/unitSchool/**","anon");
		// filterMap.put("/regionSchool/**","anon");
		// filterMap.put("/school/**","anon");
		// filterMap.put("/clazz/**","anon");
		// filterMap.put("/clazzEvaluation/**","anon");
		// filterMap.put("/schoolEvaluation/**","anon");
		// filterMap.put("/canvas/**","anon");
		// //===== end
		filterMap.put("/login", "anon");
		filterMap.put("/actuator/**", "anon");
		filterMap.put("/hystrix", "anon");
		filterMap.put("/hystrix.stream", "anon");
		filterMap.put("/logout", "logout");
		filterMap.put("/js/**", "anon");
		filterMap.put("/css/**", "anon");
		filterMap.put("/user/**", "per");
		filterMap.put("/**", "authc");
		sfb.setFilterChainDefinitionMap(filterMap);
		return sfb;
	}
	@Bean
	public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {
		DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
		advisorAutoProxyCreator.setProxyTargetClass(true);
		return advisorAutoProxyCreator;
	}
	@Bean
	public AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor(
			@Qualifier("securityManager") SecurityManager securityManager) {
		AuthorizationAttributeSourceAdvisor as = new AuthorizationAttributeSourceAdvisor();
		as.setSecurityManager(securityManager);
		return as;
	}
	@Bean
	public FilterRegistrationBean delegatingFilterProxy() {
		FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
		DelegatingFilterProxy proxy = new DelegatingFilterProxy();
		proxy.setTargetFilterLifecycle(true);
		proxy.setTargetBeanName("shiroFilter");
		filterRegistrationBean.setFilter(proxy);
		return filterRegistrationBean;
	}
}

springboot單元測試使用@value讀取不到值, yml的兩個坑

yml兩個坑

yml 和 properties都可以作為配置文件在springboot項目中使用

縮進問題

yml使用空格縮進代表包之間的層級問題,有時候差一個空格就可能導(dǎo)致配置不生效。另外,在同級配置之間使用 # 注釋

也會導(dǎo)致該問題,因為程序是按層級讀取配置的,加上注釋隔斷上下兩行之后,程序會不清楚下一條配置是上一個的下級還是同級(大致是這意思。。。)

springboot 2.X版本在單元測試中讀取不到y(tǒng)ml配置文件的值

這是個大坑,在項目中寫單元測試的時候需要讀取一個yml配置文件的值,發(fā)現(xiàn)無論如何都讀取不到,后來發(fā)現(xiàn)了這個坑。改成properties就行了。

總結(jié)

建議用properties!

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 最優(yōu)二叉樹的哈夫曼算法的簡單實現(xiàn)

    Java 最優(yōu)二叉樹的哈夫曼算法的簡單實現(xiàn)

    這篇文章主要介紹了Java 最優(yōu)二叉樹的哈夫曼算法的簡單實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Java實現(xiàn)文件的分割與合并

    Java實現(xiàn)文件的分割與合并

    這篇文章主要為大家詳細介紹了Java實現(xiàn)文件的分割與合并,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java和Ceylon對象的構(gòu)造和驗證

    Java和Ceylon對象的構(gòu)造和驗證

    這篇文章主要為大家詳細介紹了Java和Ceylon對象的構(gòu)造和驗證,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • SpringCloud通過MDC實現(xiàn)分布式鏈路追蹤

    SpringCloud通過MDC實現(xiàn)分布式鏈路追蹤

    在DDD領(lǐng)域驅(qū)動設(shè)計中,我們使用SpringCloud來去實現(xiàn),但排查錯誤的時候,通常會想到Skywalking,但是引入一個新的服務(wù),增加了系統(tǒng)消耗和管理學(xué)習(xí)成本,對于大型項目比較適合,但是小的項目顯得太過臃腫了,所以本文介紹了SpringCloud通過MDC實現(xiàn)分布式鏈路追蹤
    2024-11-11
  • Java實現(xiàn)計算一個月有多少天和多少周

    Java實現(xiàn)計算一個月有多少天和多少周

    這篇文章主要介紹了Java實現(xiàn)計算一個月有多少天和多少周,本文直接給出實例代碼,需要的朋友可以參考下
    2015-06-06
  • Java ArrayList add(int index, E element)和set(int index, E element)兩個方法的說明

    Java ArrayList add(int index, E element)和set(int index, E el

    今天小編就為大家分享一篇關(guān)于Java ArrayList add(int index, E element)和set(int index, E element)兩個方法的說明,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • SpringBoot集成Druid監(jiān)控頁面最小化配置操作

    SpringBoot集成Druid監(jiān)控頁面最小化配置操作

    這篇文章主要介紹了SpringBoot集成Druid監(jiān)控頁面最小化配置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • JavaWeb中的常用的請求傳參注解說明

    JavaWeb中的常用的請求傳參注解說明

    這篇文章主要介紹了JavaWeb中的常用的請求傳參注解說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java線程使用同步鎖交替執(zhí)行打印奇數(shù)偶數(shù)的方法

    Java線程使用同步鎖交替執(zhí)行打印奇數(shù)偶數(shù)的方法

    這篇文章主要介紹了Java線程使用同步鎖交替執(zhí)行打印奇數(shù)偶數(shù)的方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • SpringBoot_Cache自定義使用SimpleCacheManager方式

    SpringBoot_Cache自定義使用SimpleCacheManager方式

    這篇文章主要介紹了SpringBoot_Cache自定義使用SimpleCacheManager方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評論

承德市| 柘城县| 修水县| 尚志市| 东至县| 洛南县| 郓城县| 永城市| 兴业县| 大理市| 尤溪县| 曲沃县| 呈贡县| 涟水县| 朝阳市| 雅安市| 太保市| 府谷县| 大田县| 贡嘎县| 兰西县| 容城县| 镇江市| 原阳县| 隆化县| 垦利县| 兴业县| 平果县| 吉木萨尔县| 松潘县| 凤庆县| 广南县| 白玉县| 通海县| 青川县| 广州市| 旬阳县| 巧家县| 青州市| 定襄县| 四平市|