Spring Security Post授权

时间:2014-02-06 18:36:44

标签: java spring security rest spring-security

我正在尝试使用Spring Security 3.2保护REST Web应用程序(除了Sring Sec之外,我还使用Jersey / Guice)。 我成功地设法使用了身份验证和角色授权,但是我很难让@PostAuthorization注释处理我的方法。

这是我的spring安全配置:

<beans>
  <security:global-method-security pre-post-annotations="enabled">
    <security:expression-handler ref="exampleExpressionHandler"/>
  </security:global-method-security>

  <bean id="exampleExpressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
    <property name="permissionEvaluator" ref="myPermissionEvaluator"/>
  </bean>

  <bean id="myPermissionEvaluator" class="org.test.spring.application.security.SecurityPermissionEvaluator" />

  <security:http auto-config='true' create-session='stateless' use-expressions="true" realm="My Webapp Backend">
      <security:intercept-url pattern="/api/v1/**" access="hasRole('ROLE_WEB_API')"/>
      <security:intercept-url pattern="/**"  access="permitAll"/>
      <security:http-basic />
  </security:http>

  <security:authentication-manager>
      <security:authentication-provider>
      <security:user-service>
        <security:user name="webapi" password="webapi" authorities="ROLE_WEB_API" />
        <security:user name="webuser" password="webuser" authorities="ROLE_WEB_USER" />
      </security:user-service>
      </security:authentication-provider>
  </security:authentication-manager>
</beans>

以下是PermissionEvaluator的实现(非常简单应该拒绝所有):

public class SecurityPermissionEvaluator implements PermissionEvaluator
{
   private static Logger logger = LoggerFactory.getLogger(SecurityPermissionEvaluator.class);

   @Override
   public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission)
   {
      logger.info("=YAH= Security Evaluator hasPermission() invoked");
      return false;
   }

   @Override
   public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission)
   {
      logger.info("=YAH= Security Evaluator hasPermission2() invoked");
      return false;
   }

   public SecurityPermissionEvaluator()
   {
      logger.info("=YAH= Security Evaluator created");
   }
}

最后这里是我希望触发我的权限评估程序的代码

   @GET
   @PostFilter("hasPermission(filterObject, 'read')")
   public List<MyDTO> getHomePages()
   {
      return myDTOAssembler.toDTOList(hompepageRepo.findAll());
   }

当我访问我的资源时,我从未收到任何“= YAH =”日志消息,似乎我的评估者永远不会被调用也不会被创建。

春天报告启动应用程序时没有错误,所以两者都没有。

我很确定这是一个配置问题,但我确实遵循了指南和SO q / a而无法提供更好的功能。

所以,如果你有任何建议,我会非常高兴,因为我对Spring世界真的很陌生。

0 个答案:

没有答案