がサポートされていません。私はHttpServletRequest.getServerNameにアクセスしようとしています()CustomWebSecurityExpressionRootにUnsupportedOperationException javax.servlet.ServletRequest.getServerNameは()
内request.getServerName()
ここに私のコードです:
public class CustomWebSecurityExpressionRoot extends WebSecurityExpressionRoot {
public CustomWebSecurityExpressionRoot(Authentication a, FilterInvocation fi) {
super(a, fi);
}
public boolean isLocal() {
return "localhost".equals(request.getServerName());
}
}
この式ルートはFilterSecurityInterceptorで設定されています
@Override
public void configure(final WebSecurity web) throws Exception {
final HttpSecurity http = getHttp();
web.postBuildAction(() -> {
FilterSecurityInterceptor fsi = http.getSharedObject(FilterSecurityInterceptor.class);
fsi.setSecurityMetadataSource(metadataSource);
web.securityInterceptor(fsi);
});
}
次に、 "ローカルとhasRole(" ADMIN ")"この式を呼び出すデータベースエントリがあります。
「DummyRequest」としてServletRequestをラップするプロキシが存在し、他のすべてのメソッドはサポートされていないようです。
しかし、これが実行されますとき、私は次のエラーを取得する:
java.lang.UnsupportedOperationException: public abstract java.lang.String javax.servlet.ServletRequest.getServerName() is not supported
at org.springframework.security.web.UnsupportedOperationExceptionInvocationHandler.invoke(FilterInvocation.java:235) ~[spring-security-web-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at com.sun.proxy.$Proxy134.getServerName(Unknown Source) ~[na:na]
at javax.servlet.ServletRequestWrapper.getServerName(ServletRequestWrapper.java:207) ~[tomcat-embed-core-8.5.16.jar:8.5.16]
ここから1つの質問は、isLocal()メソッドと呼ばれていますか?それはインターセプターを形成していますか?その部分を分かち合うことができますか? 'CustomWebSecurityExpressionRoot'もコンポーネントですか?注射された? –