Apache Shiroを使用してSpring対応のWebアプリのセキュリティを強化しようとしているため、フィルターチェーン定義をSpring構成のファイルに構成しています。同等の機能を実現するにはどうすればよいですか
@Controller
@RequestMapping("/mywebapp")
// @RequiresAuthentication (is this possible ? wish i could do this !)
public class MyWebAppController {
@RequiresRoles(value={"Role1","Role2","Role3"},logical=Logical.OR)
@RequestMapping(value="/home", method = RequestMethod.GET)
public String home() { return .. }
そして私のspring-configファイルにはこれが含まれています:私のdispatcherservletが/ rest/*にマップされていると仮定します
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="/rest/secure/windowslogin"/>
<property name="successUrl" value="/mywebapp/rest/menu"/>
<property name="unauthorizedUrl" value="/mywebapp/rest/unauthorized"/>
<property name="filters">
<util:map>
<entry key="anon">
<bean class="org.apache.shiro.web.filter.authc.AnonymousFilter"/>
</entry>
<entry key="authc">
<!-- why is this not invoked ? -->
<bean class="org.apache.shiro.web.filter.authc.PassThruAuthenticationFilter">
</bean>
</entry>
<entry key="roles">
<bean class="org.apache.shiro.web.filter.authz.RolesAuthorizationFilter"/>
</entry>
</util:map>
</property>
<property name="filterChainDefinitions">
<value>
/rest/secure/** = anon
/rest/mywebapp/** = authc, roles[Role1,Role2,Role3]
</value>
</property>
</bean>
/rest/mywebapp/**
上記のコードでは、前述のロールを使用するための論理的または一種のマッピングが必要です。これはshiroアノテーションを介して可能であり、機能しますが、すべてのメソッドで指定するのではなく、ここで処理したいと思います(shiroがクラスレベルのアノテーションをまだサポートしているとは思わないので?)。これは可能ですか?
また、補足として、authcフィルターが呼び出されないのはなぜですか?(今のところ、Windowsログインは認証として機能し、認証にのみshiroを使用できると想定しています)
home page = meta refresh to /rest/secure/windowslogin/
if within intranet -> login ...
else /rest/secure/login ... login page.
loginurlが違うからですか?これを回避するにはどうすればよいですか?構成ファイルで指定されたroles[..]部分を使用して、レルムのgetAuthorizationInfoが呼び出されることに注意してください。ただし、要求が「authc」であるかどうかを確認するためのチェックが必要であると想定していました。(これはおそらく、フィルターが呼び出され、SubjectUtils.getSubject()が認証のためにチェックされることを意味します)。フローまたは構成に何かが欠けていますか?