我的控制器:
@RequestMapping("/createchar")
@PreAuthorize("hasRole('ROLE_USER')")
public String createCharacter(Map<String, Object> map, Principal principal) {spring-security.xml
<global-method-security pre-post-annotations="enabled"
proxy-target-class="true" />
...
<intercept-url pattern="/game*" access="ROLE_USER" />
<form-login login-page="/account/login" ...即使在重新部署应用程序之后,页面也始终被加载。我还没登录呢。为什么不将其重定向到登录页面?
如果您需要更多的信息,请随时询问。
发布于 2012-12-29 11:07:09
控制器bean通常驻留在servlet上下文中,因此它们既不受AOP声明的影响,也不受根应用程序上下文中的bean post处理器的影响。
Spring中applicationContext.xml和Springservlet.xml的区别
我认为代理控制器类不是一个好主意,请参阅使用@Controller在控制器上实现接口的Spring问题 -因此我更愿意避免在控制器类上使用AOP以避免意外,并且只在服务/DAO bean(即根应用程序上下文中的bean)上使用它。
在这种情况下,您应该使用拦截-url方法的网页。
发布于 2013-08-02 16:11:32
在实习期间,我也面临着同样的问题。我和我的队友花了两天的时间来编写Spring安全源代码。然而,今天我们被告知,甚至看不到任何例外的原因是前面提到的“操作程序机制”。原因是必须创建代理类。
弹簧代理机制,所以我们在特定情况下所需要做的就是添加
<aop:config proxy-target-class="true" />
到app-servlet.xml
如果您尝试调试代码并查找Spring调用的方法,您甚至可以解决类似的问题(因为真正的原因可能不同),但这对您的耐心来说是一个巨大的挑战。
希望这会对你和其他人有所帮助。
发布于 2014-05-01 22:45:22
我也面临着同样的问题。当我将下面的元素从applicationContext.xml移到*-servlet.xml (我的dispatcher的配置xml)时,我的问题就解决了。
<security:global-method-security secured-annotations="enabled"/>您必须将此元素包含在dispatcher的xml中,而不是应用程序的xml中。
弹簧常见问题
https://stackoverflow.com/questions/14080893
复制相似问题