我使用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中,我不知道它们是否是链接的。有人可以帮忙吗?
答案 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>