Spring Security 3.1作为身份验证运行

时间:2018-06-21 23:38:48

标签: java spring spring-security rmi spring-remoting

我有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>
  • MVC应用程序

这是我的导入程序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属性来设置安全上下文,但是我不知道如何做到。

谢谢。

0 个答案:

没有答案