Spring Security метод авторизации не работает - PullRequest
0 голосов
/ 19 марта 2012

вот описание проблемы. Я разрабатываю веб-приложение с GWT. Я успешно интегрировал Spring Security с gwt для функции аутентификации с помощью следующего кода. Теперь я хочу использовать пружинный «метод безопасности» в своем веб-приложении. Поэтому я сделал то, что написано в 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 не сервлетом диспетчера пружин.

Однако, похоже, эта конфигурация не работает. Фактически, любая роль может иметь право доступа к функции. Очень странно. Надеюсь ваши ответы!

1 Ответ

2 голосов
/ 19 марта 2012

Используйте один элемент global-method-security, содержащий оба атрибута.

Также прочитайте соответствующий раздел часто задаваемых вопросов по безопасности Spring по вопросам, связанным с использованием метода безопасности и веб-контроллеров, если это то, что выделают (вы также найдете ту же проблему, что обсуждалась здесь).

Сообщение журнала, о котором вы сообщаете, не является ошибкой и неважно, если вы не используете hasPermission() в своих выражениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...