すべてのエンドポイントに@RestController
注釈を使用するSpring 4 MVCアプリケーションがあります。アプリケーションはweb.xml
もapplicationContext.xml
も使用しません。すべてが完璧に動作し、今はApache Shiroが他のすべてと協力して作業しようとしています。Spring 4 MVC + Apache Shiro
のようにには、私が構築したRESTサービスのいずれかにアクセスするauthc/authzの問題があるときにShiroに例外がスローされます。
これまでのところ、私は史郎を初期化するための設定の基本的なクラスに設定することができました:私は@RequiresUser
で、このようなエンドポイントを構築し、初期化子でAuthorizingRealm
にブレークポイントを設定すると、何もいないようにみえ
@Configuration
public class ShiroInitializer {
@Bean(name = "realmLocal")
@DependsOn ("lifecycleBeanPostProcessor")
public Realm realmLocal() {
return new AuthorizingRealm() {
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return null;
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
return null;
}
};
}
@Bean (name = "lifecycleBeanPostProcessor")
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor();
}
@Bean
public org.apache.shiro.mgt.SecurityManager getSecurityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(realmLocal());
return securityManager;
}
@DependsOn("lifecycleBeanPostProcessor")
@Bean
public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
DefaultAdvisorAutoProxyCreator proxyCreator = new DefaultAdvisorAutoProxyCreator();
proxyCreator.setProxyTargetClass(true);
return proxyCreator;
}
// enable shiro annotations
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor() {
AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
advisor.setSecurityManager(getSecurityManager());
return advisor;
}
@Bean (name = "shiroFilter")
public ShiroFilterFactoryBean getShiroFilter() {
ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
shiroFilter.setSecurityManager(getSecurityManager());
Map<String, String> filters = new ConcurrentHashMap<>();
filters.put("/**", "authcBasic");
shiroFilter.setFilterChainDefinitionMap(filters);
return shiroFilter;
}
}
をピックアップしたメッセージは、任意のauthcは/のauthz機能キックオフせずに表示されますので、ここで
@RestController
@RequestMapping (value = "/")
@RequiresUser
public class RootEndpoint {
@RequestMapping (method = RequestMethod.GET)
public String doGet() throws Exception {
return "{ \"hello\": \"world\" }";
}
}
を私の質問があり
- Q1私の設定には何がありますか?可能であれば、私はXML構成を避けようとしています。
- Q2基本を取得した後、ユーザーを別のページにリダイレクトするのではなく、例外をスローするために使用できるのは何ですか?私は自分のカスタム
ShiroFilterFactoryBean
が必要ですか?