Spring Security方法授权不起作用

时间:2012-03-19 14:11:30

标签: gwt spring-security

这是问题的描述。我正在使用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。

然而,似乎这种配置不起作用。事实上,任何角色都可以拥有访问该功能的权限。 很奇怪。 希望你的答案!

1 个答案:

答案 0 :(得分:2)

使用包含这两个属性的单个global-method-security元素。

关于使用方法安全性和Web控制器的问题,请阅读relevant section of the Spring Security FAQ,如果这是您正在做的事情(您也会发现此处讨论的相同问题)。

您报告的日志消息不是错误,除非您在表达式中使用hasPermission(),否则它不重要。