解決自定義Shiro.Realm擴充套件類不能用註解(@Resource或@Autowire)自動裝配的問題
阿新 • • 發佈:2019-01-07
在自定義realm的時候注入的時候就會報錯,去掉註解@Autowired 執行就會沒有問題。錯誤的原因應該在於註解無法注入
解決方案: 因為shiro的realm屬於Filter,簡單說就是初始化realm時, spring 還未載入相關業務Bean,那麼解決辦法就是將springmvc的配置檔案載入提前。 所以將SpringMVC的配置檔案在 <context-param>中載入。/** * * 專案名稱:颶風保險系統 * <p> * 功能模組名稱: * <p> * 檔名稱為:InsuranceShiroRealm.java * <p> * 檔案功能簡述: * <p> * 專案研發:張建明 * <p> * 修改記錄: * <p> * 修改人 修改日期 備註 * * @version v1.0 * @copyright Jufengad.com */ @Service public class InsuranceShiroRealm extends AuthorizingRealm{ private WriteLog logService; @Resource(name="simpleDtoFactory") private DtoFactory simpleDtoFactory;
<?xml version="1.0" encoding= "UTF-8"?> <web-app xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xmlns= "http://java.sun.com/xml/ns/javaee" xmlns:web= "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id= "WebApp_ID" version ="3.0" > <display-name>insurance-web</display-name> <context-param> <param-name>webAppRootKey</param-name> <param-value>webapp.web.root</param-value> </context-param> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/*.xml,classpath:insurance-web-servlet.xml</param-value> </context-param> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter>