0

我使用 spring-roo 来生成我的项目。我不知道这两件事是否相关,但在 Controller 中,@Async 或 @Secure 注释都不起作用。对于@Secure:我<global-method-security secured-annotations="enabled"/>在 applicationContext-security.xml 中添加了标签并修改了 pom.xml 以满足依赖关系,

<dependency>
   <groupId>org.springframework.security</groupId>
   <artifactId>spring-security-aspects</artifactId>
   <version>3.0.5.RELEASE</version>
</dependency>

在控制器中的方法上方,我添加了@Secured("ROLE_ADMIN")但无论任何角色每个人都可以访问该方法。我错过了什么配置以使@Secure 处于活动状态?

对于@Async:在 applicationContext.xml 中,我添加了

<task:annotation-driven executor="asyncExecutor"/>
<task:executor id="asyncExecutor" pool-size="${executor.poolSize}"/>

在控制器.java 中:

@Async
private void justWait20seconds() {
    try {
        Thread.sleep(20000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

我希望这个方法不会阻塞 main 方法,但它没有。这2个标签都在我的UserController.java中,不知道有没有关联。任何人都可以帮忙吗?

4

2 回答 2

2

听起来您不了解 Spring 上下文是如何在 Spring MVC 应用程序中组织的,并且正在将注释处理指令添加到错误的上下文中。阅读 Spring MVC 中的 Spring 上下文。您可以在以下位置找到我的另一个 SO 答案,该答案分支到其他相关答案:为什么 DispatcherServlet 创建另一个应用程序上下文?

于 2012-05-07T04:07:13.327 回答
0

我遇到了同样的问题,安全注释在 Roo 项目的 jspx 中起作用,但在控制器中不起作用。我的解决方法是将以下内容添加到 webmvc-config.xml:

<security:global-method-security secured-annotations="enabled" />

(将此添加到 applicationContext-security.xml 对我不起作用)

然后我在 pom.xml 中添加了对 cglib 的依赖:

<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>2.2</version>
</dependency>
于 2013-03-12T19:10:06.123 回答