您的位置:首页 > 编程语言 > Java开发

spring boot集成shiro,使用java annotation配置而不是xml配置的经验

2014-06-30 18:37 399 查看
主要麻烦在于LifecycleBeanPostProcessor和AuthorizationAttributeSourceAdvisor的配置。

LifecycleBeanPostProcessor可以配成static的,但AuthorizationAttributeSourceAdvisor依赖securityManager,所以就不太方便配成static的了。
因为securityManager会依赖realm,而realm往往需要依赖dataSource这样的bean,比如JdbcRealm。但AuthorizationAttributeSourceAdvisor在注入的时候,dataSource还没有被注入进来,这时用@Autowired DataSource dataSource,注入的会是个null。

那么怎么办呢?
解决办法是需要把securityManager和realm先各自独立的注入进来,然后再找个地方组装
我是通过ApplicationContextAware来实现的,把securityManager和realm的装配放到 setApplicationContext里面
@Configuration
public class ShiroConfig implements ApplicationContextAware {
......
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
try {
//组装realm到securityManager中
final Realm myRealm = (Realm) applicationContext.getBean("myRealm");
final DefaultWebSecurityManager sm = (DefaultWebSecurityManager) applicationContext
.getBean("securityManager");
sm.setRealm(myRealm);
} catch (Exception e) {
throw new Error("Critical system error", e);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: