这是问题的描述。我正在使用GWT开发一个Web应用程序。我使用以下代码成功地将spring security与gwt集成在一起,用于身份验证功能。现在我想在我的Web应用程序中使用spring“方法安全性”。所以我在http://static.springsource.org/spring-security/site/docs/3.1.x/reference/ns-config.html,
中做了它的说法只需在上面提到的应用程序上下文文件中添加<global-method-security secured-annotations="enabled"/>
。
<http>
<http-basic/>
<intercept-url pattern="/**" access=""/>
<form-login />
<logout />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="jimis" password="jimispassword" authorities="ROLE_USER,ROLE_ADMIN" />
<user name="bob" password="bobspassword" authorities="ROLE_ADMIN" />
</user-service>
</authentication-provider>
</authentication-manager>
**<global-method-security secured-annotations="enabled"/>**
然后将注释@Secured(“ROLE_ADMIN”)添加到我控制访问权限的函数上方
然后我在web.xml中添加应用程序上下文的声明,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee">
<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>App.html</welcome-file>
</welcome-file-list>
<session-config>
<session-timeout>10</session-timeout> <!-- in minutes -->
</session-config>
<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext-security.xml </param-value> </context-param> <filter> <filter-name>springSecurityFilterChain</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>springSecurityFilterChain</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
<servlet>
<servlet-name>appService</servlet-name>
<servlet-class>com.google.gwt.app.example.server.AppServiceImpl</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>appService</servlet-name>
<url-pattern>/app/appService.rpc</url-pattern>
</servlet-mapping>
</web-app>
请注意,我刚刚声明了gwt-servlet而不是spring dispatcher servlet。
然而,似乎这种配置不起作用。事实上,任何角色都可以拥有访问该功能的权限。 很奇怪。 希望你的答案!
答案 0 :(得分:2)
使用包含这两个属性的单个global-method-security
元素。
关于使用方法安全性和Web控制器的问题,请阅读relevant section of the Spring Security FAQ,如果这是您正在做的事情(您也会发现此处讨论的相同问题)。
您报告的日志消息不是错误,除非您在表达式中使用hasPermission()
,否则它不重要。