Бесконечный цикл с использованием Spring Security - страница входа защищена, хотя она должна разрешать анонимный доступ - PullRequest
2 голосов
/ 06 января 2010

У меня есть приложение Spring (версия Spring 2.5.6.SEC01 , версия Spring Security 2.0.5 ) со следующей настройкой:

web.xml

<welcome-file-list>
  <welcome-file>
    index.jsp
  </welcome-file>
</welcome-file-list>

Страница index.jsp находится в каталоге WebContent и просто содержит перенаправление:

<c:redirect url="/login.htm"/>

В appname-servlet.xml существует преобразователь представлений, указывающий на страницы jsp в WEB-INF / jsp

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/WEB-INF/jsp/" />
  <property name="suffix" value=".jsp" />
</bean>

В файле security-config.xml у меня есть следующая конфигурация:

<http>
  <!-- Restrict URLs based on role -->
  <intercept-url pattern="/WEB-INF/jsp/login.jsp*" access="ROLE_ANONYMOUS" />
  <intercept-url pattern="/WEB-INF/jsp/header.jsp*" access="ROLE_ANONYMOUS" />
  <intercept-url pattern="/WEB-INF/jsp/footer.jsp*" access="ROLE_ANONYMOUS" />
  <intercept-url pattern="/login*" access="ROLE_ANONYMOUS" />
  <intercept-url pattern="/index.jsp" access="ROLE_ANONYMOUS" />
  <intercept-url pattern="/logoutSuccess*" access="ROLE_ANONYMOUS" />

  <intercept-url pattern="/css/**" filters="none" />
  <intercept-url pattern="/images/**" filters="none" />
  <intercept-url pattern="/**" access="ROLE_ANONYMOUS" />

  <form-login login-page="/login.jsp"/>
</http>

<authentication-provider>
    <jdbc-user-service data-source-ref="dataSource" />
</authentication-provider>

Однако я даже не могу перейти на страницу входа и получить следующую ошибку в журнале:

ВНИМАНИЕ: страница входа в систему защищен цепочкой фильтров, но вы не имеют анонимности аутентификация включена. Это почти конечно ошибка.

Я пытался изменить ROLE_ANONYMOUS на IS_AUTHENTICATED_ANONYMOUSLY, изменить страницу входа на index.jsp, login.htm и добавить разные значения для перехвата, но я не могу получить его, поэтому страница входа доступна и безопасна относится к другим страницам. Что я должен изменить, чтобы избежать этой петли?

Ответы [ 4 ]

4 голосов
/ 07 января 2010

Проблема была в том, что мне не хватало

<anonymous /> 
Тег

в разделе http файла security-config.xml , поэтому я не смог попасть на страницу входа анонимно. Как только я добавил это, я смог перейти на страницу входа и пройти аутентификацию.

0 голосов
/ 28 апреля 2014

Вы можете использовать другую сек: http секции

<sec:http pattern="/login" security="none" />

или вы можете использовать

<sec:intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" />
0 голосов
/ 29 марта 2010
<intercept-url pattern="/login*" access="ROLE_ANONYMOUS" />

вы могли бы заменить это на

<intercept-url pattern="/login*" filter="none" />

потому что весенняя безопасность верна, нет смысла защищать страницу входа

0 голосов
/ 06 января 2010

Вы должны установить атрибут auto-config:

<http auto-config="true">
    <intercept-url ... />
    ...
</http>

EDIT: Чтобы избежать проблем с несколькими UserDetailsService, вы, вероятно, можете заменить объявление <authentication-provider> чем-то вроде этого:

<authentication-provider user-service-ref = "userService" />

<jdbc-user-service id = "userService" data-source-ref="dataSource" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...