Controller中的Spring注释不起作用? @Secure和@Async都不起作用

时间:2012-05-06 06:51:42

标签: spring spring-security spring-roo

我使用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 Active?

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

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

在controller.java中:

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

我希望这种方法不会阻止主方法,但事实并非如此。这两个标签都在我的UserController.java中,我不知道它们是否是链接的。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

听起来你不明白Spring上下文是如何在Spring MVC应用程序中组织的,并且正在将注释处理指令添加到错误的上下文中。在Spring MVC中对Spring上下文做一些阅读。您可以在Why DispatcherServlet creates another application context?

找到我的另一个SO答案,分支到其他相关答案

答案 1 :(得分: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>