从不同来源调用Spring Security

时间:2009-07-16 05:08:40

标签: spring-security

我只想对来自HTTP请求的调用运行身份验证/授权。

我希望启用身份验证/授权的控制器上的方法是从多个源调用的。在这种情况下,它可以由另一个控制器或直接HTTP请求调用。

我可以关闭来自其他控制器的来电的身份验证/授权吗?

如果你还没有这么清楚的话,请进一步阅读。

假设我在控制器A上有一个方法doIt()。我还有一个控制器B,我在其中注入控制器A.在控制器B的某个点上,我调用'a.doIt()',但是我也可以从HTTP调用doIt.do调用doIt()。 如果呼叫来自HTTP呼叫,我想测试认证/授权的呼叫,但是如果来自控制器B则不测试。

3 个答案:

答案 0 :(得分:1)

你在B中注入A的安全代理bean。你不能在没有代理的情况下注入A吗?
Bean A代理:

<bean id="beanASecured" class="org.springframework.aop.framework.ProxyFactoryBean">
  <property name="targetName" value="beanA"/>
  <property name="interceptorNames">
    <value>securityInterceptor</value>
  </property>
</bean>

secutiryInterceptor:

<bean id="securityInterceptor" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor">
   ...
</bean>

Bean A未代理:

<bean id="beanA" class="com.A"/>

Bean B注入bean'A not proxied':

<bean id="beanB" class="com.B">
   <constructor-arg ref="beanA"/>
</bean>

答案 1 :(得分:0)

您只需要在URL上配置spring身份验证,而不是在方法调用上配置。这对你有用。

答案 2 :(得分:0)

我认为没有办法做到这一点,我猜你只需要第二种方法,比如 doitDirectCall(..),实际的其他控制器调用在HTTP请求中调用getit(..)