我有2个Spring应用程序。第一个是核心应用程序,其中包含使用RmiServiceExporter导出的服务列表。第二个是使用核心应用程序导出的服务的Spring MVC。一切正常。现在,我将通过运行方式方法使用spring security保护我的核心应用程序。我的问题是在调用核心应用程序之前,如何在MVC应用程序安全上下文中注入“运行方式密钥”,因为出现此错误
org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: 在SecurityContext中找不到身份验证对象
这是我的导出器XML配置文件的一部分
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="service" ref="userService"/>
<property name="serviceInterface" value="com.xxx.core.user.service.interfaces.UserServiceInterf"/>
<property name="serviceName" value="${service.exporter.user.name}"/>
<property name="registryPort" value="${service.exporter.user.port}"/>
</bean>
她是我的安全XML配置文件
<bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased">
<constructor-arg ref="roleVoter" />
</bean>
<bean id="roleVoter" class="org.springframework.security.access.vote.RoleVoter">
<property name="rolePrefix" value="ROLE_" />
</bean>
<bean id="runAsAuthenticationProvider" class="org.springframework.security.access.intercept.RunAsImplAuthenticationProvider">
<property name="key" value="${runAsKey.local}"/>
</bean>
<sec:global-method-security access-decision-manager-ref="accessDecisionManager">
<sec:protect-pointcut expression="execution(* com.xxx.core.user.service.interfaces..*.*(..))" access="ROLE_USER_MANAGEMENT"/>
</sec:global-method-security>
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider ref="runAsAuthenticationProvider"/>
</sec:authentication-manager>
这是我的导入程序XML配置文件的一部分
<bean id="userService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean" autowire="byName">
<property name="serviceUrl" value="${service.importer.core.user.user.service.url}"/>
<property name="serviceInterface" value="com.xxx.core.user.service.interfaces.UserServiceInterf"/>
<property name="refreshStubOnConnectFailure" value="true"/>
<property name="lookupStubOnStartup" value="false"/></property>
</bean>
经过一些搜索,我发现可以通过设置RmiProxyFactoryBean的remoteInvocationFactory属性来设置安全上下文,但是我不知道如何做到。
谢谢。