具有任务队列问题的 Spring 安全性

Posted

技术标签:

【中文标题】具有任务队列问题的 Spring 安全性【英文标题】:Spring security with Task queue issue 【发布时间】:2012-11-29 22:23:24 【问题描述】:

在 GAE 中,我有 cron 作业,它会查找电子邮件表并开始通过推送队列工作人员为每封电子邮件发送这些电子邮件。

// Worker method body
MailService m = MailServiceFactory.getMailService();
m.sendToAdmins(new MailService.Message(fromAddress, "", subject, content));

首先我想问一下关于发送电子邮件的问题,我在 GAE 文档中看到发送电子邮件是排队工作:

邮件服务将消息排队,然后尝试发送, 如果目标邮件服务器不可用,可能会重试。 错误和退回邮件被发送到发件人地址 电子邮件。

如果以前的工作方式与队列相同,这是否让我可以选择不使用推送队列?

但我仍然想将推送队列用于任何未来的功能,所以主要问题是: Out 团队负责人使用 Spring Security 完成了安全部分,但任务无法正常工作。每个任务的输出:

Dec 12, 2012 8:44:2 AM com.google.apphosting.utils.jetty.AppEngineAuthentication$AppEngineAuthenticator authenticate
INFO: Returning NOBODY because of SkipAdminCheck.

请注意,当我评论以下内容时,它们确实工作得很好:

<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class> org.springframework.web.filter.DelegatingFilterProxy</filterclass>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

那么您认为这是什么原因呢?有没有办法在不影响安全性的情况下使任务队列工作?

【问题讨论】:

【参考方案1】:

通过将以下内容添加到 spring-security.xml(spring 安全层)与同事一起修复它

<http use-expressions="true" entry-point-ref="authenticationEntryPoint">
<intercept-url pattern="/queuecontroller/**" access="permitAll" />

并在 web.xml(应用引擎安全层)中围绕它添加约束

<security-constraint>
    <web-resource-collection>
      <web-resource-name>any-resource</web-resource-name>
      <url-pattern>/emailcontroller</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>admin</role-name>
    </auth-constraint>
    <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
  </security-constraint>

【讨论】:

以上是关于具有任务队列问题的 Spring 安全性的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot + Redis 实现延时队列,写得太好了!

线程安全 FIFO 队列/缓冲区

基于消息队列(RabbitMQ)实现延迟任务

Spring Boot + Redis 实现延时队列,写得太好了!

Flutter上线项目实战——队列任务

并发队列之ConcurrentLinkedQueue