1つのオプションは、RoleVoterを拡張する独自のAccessDecisionVoterを作成し、ホスト名に基づいて追加のチェックを追加することです。このような何か:
public class MyVoter extends RoleVoter {
public int vote(Authentication authentication,
java.lang.Object object,
java.util.Collection<ConfigAttribute> attributes) {
FilterInvocation filterInvocation = (FilterInvocation) object;
HttpRequest request = filterInvocation.getHttpRequest();
// get subdomain from request
String subdomain = getSubdomain(request);
if ("free".equals(subdomain)) {
return ACCESS_GRANTED;
}
else {
super.vote(authentication, object, attributes);
}
}
}
その後、あなたの投票をアップワイヤー:
<security:http auto-config="true"
use-expressions="true"
access-decision-manager-ref="accessDecisionManager">
...
</security:http>
<bean id="accessDecisionManager"
class="org.springframework.security.access.vote.UnanimousBased">
<property name="decisionVoters">
<list>
<bean class="com.acme.MyVoter" />
</list>
</property>
</bean>
あなたはさらに一歩それを取るしたい場合は、また、あなたがハードコーディングされたホスト名のチェックを外すことが可能になるそのconfiguration attributesあなた自身を書くことができ有権者とような何か:あなたのセッションクッキーで
<intercept-url pattern="/Admin/*" access="ROLE_GENERAL" domain="free.acme.com" />
あなたがサブドメインではなく、異なるWebアプリケーションで同じWebアプリケーションを使用していますか? – Qwerky
サブドメインチェックを追加するために 'FilterSecurityInterceptor'を上書きするかもしれませんが、実際の解決策ではなく、ハックのようなにおいがします。すぐに使えるソリューションについて質問をアップアップしてください。また、web-app/web-containerサブドメインの設定について、より具体的なものにすることもできます。 – alexkasko
Yeh異なるサブドメインに同じアプリを使用すると、異なるサブドメインはユーザーとは異なる機能を表しますが、同じサーバーがそれを処理します(費用対効果の理由から)。 Webアプリケーションコンテナのサブドメインconfigでは、フィルタが呼び出されてサブドメインが呼び出されたことを検出し、その要求がそのドメインの機能に対して関連するアクションに転送されます。すべての人がアクセスできるfree.domain.comと、機能が追加された、より見栄えの良いpro.domain.comを想像してみてください。 –