Создание пользовательской формы входа с помощью Spring Security - PullRequest
3 голосов
/ 11 августа 2010

Я пытаюсь настроить пользовательскую форму входа для работы с Spring Security 3.0.

Форма входа по умолчанию отлично работает с конфигурацией безопасности ниже. Затем я добавил атрибут form-login, создал контроллер входа и страницу jsp для обработки URL-адреса / account / logIn, и теперь у меня возникла такая проблема: когда я ввожу свои учетные данные guest / guest, меня отправляют обратно на страницу входа.

Одна вещь, которую я заметил в журнале catalina.out, это то, что успешная проверка смотрит на / j_security_check, тогда как неудачная проверка смотрит на /accounts/j_security_check.

Вот мой security-config.xml:

<http auto-config="true" use-expressions="true">
    <form-login login-page="/accounts/logIn" /><!--ADDED THIS AFTER TESTING DEFAULT LOGIN-->
    <intercept-url pattern="/accounts/logIn" access="permitAll()"/>
    <intercept-url pattern="/**" access="isAuthenticated()"/>
</http>

<authentication-manager alias="authenticationManager">
    <authentication-provider>
 <user-service>
            <user authorities="ROLE_USER" name="guest" password="guest"/>
        </user-service>
    </authentication-provider>
</authentication-manager>

Вот раздел catalina.out, который выглядит актуально:

<code>
DEBUG: org.springframework.security.web.FilterChainProxy - Candidate is: '/accounts/j_spring_security_check'; pattern is /**; matched=true
DEBUG: org.springframework.security.web.FilterChainProxy - /accounts/j_spring_security_check?j_username=guest&j_password=guest at position 1 of 10 in additional filter\
 chain; firing Filter: 'org.springframework.security.web.context.SecurityContextPersistenceFilter@8cbb423'
DEBUG: org.springframework.security.web.context.HttpSessionSecurityContextRepository - HttpSession returned null object for SPRING_SECURITY_CONTEXT
DEBUG: org.springframework.security.web.context.HttpSessionSecurityContextRepository - No SecurityContext was available from the HttpSession: org.apache.catalina.sessi\
on.StandardSessionFacade@4679cf8c. A new one will be created.
DEBUG: org.springframework.security.web.FilterChainProxy - /accounts/j_spring_security_check?j_username=guest&j_password=guest at position 2 of 10 in additional filter\
 chain; firing Filter: 'org.springframework.security.web.authentication.logout.LogoutFilter@5d49453c'
DEBUG: org.springframework.security.web.FilterChainProxy - /accounts/j_spring_security_check?j_username=guest&j_password=guest at position 3 of 10 in additional filter\
 chain; firing Filter: 'org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@756095fc'
DEBUG: org.springframework.security.web.FilterChainProxy - /accounts/j_spring_security_check?j_username=guest&j_password=guest at position 4 of 10 in additional filter\
 chain; firing Filter: 'org.springframework.security.web.authentication.www.BasicAuthenticationFilter@18170f98'
DEBUG: org.springframework.security.web.FilterChainProxy - /accounts/j_spring_security_check?j_username=guest&j_password=guest at position 5 of 10 in additional filter\
 chain; firing Filter: 'org.springframework.security.web.savedrequest.RequestCacheAwareFilter@1200d083'
DEBUG: org.springframework.security.web.savedrequest.DefaultSavedRequest - pathInfo: both null (property equals)
DEBUG: org.springframework.security.web.savedrequest.DefaultSavedRequest - queryString: arg1=null; arg2=j_username=guest&j_password=guest (property not equals)
DEBUG: org.springframework.security.web.savedrequest.HttpSessionRequestCache - saved request doesn't match
DEBUG: org.springframework.security.web.FilterChainProxy - /accounts/j_spring_security_check?j_username=guest&j_password=guest at position 6 of 10 in additional filter\
 chain; firing Filter: 'org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@737951b0'
DEBUG: org.springframework.security.web.FilterChainProxy - /accounts/j_spring_security_check?j_username=guest&j_password=guest at position 7 of 10 in additional filter\
 chain; firing Filter: 'org.springframework.security.web.authentication.AnonymousAuthenticationFilter@49c06a6d'
DEBUG: org.springframework.security.web.authentication.AnonymousAuthenticationFilter - Populated SecurityContextHolder with anonymous token: 'org.springframework.secur\
ity.authentication.AnonymousAuthenticationToken@6faaf9b0: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.securit\
y.web.authentication.WebAuthenticationDetails@ffff8868: RemoteIpAddress: 0:0:0:0:0:0:0:1%0; SessionId: 0560416CA2D07AFF3040E75867157A95; Granted Authorities: ROLE_ANON\
YMOUS'

Ответы [ 2 ]

4 голосов
/ 11 августа 2010

Что должно произойти, это то, что ваша форма должна захватить имя пользователя и пароль и выполнить POST для точки входа j_spring_security_check учетные данные в качестве параметров; например,

/accounts/j_spring_security_check?j_username=guest&j_password=guest

Затем предполагается их проверить, и, если они верны, добавить детали в сеанс пользователя и перенаправить обратно на страницу, к которой пользователь пытался получить доступ в первую очередь.

Однако похоже, что запрос к URL-адресу j_spring_security_check перенаправляется цепочкой фильтров.

Я могу представить себе две возможные причины:

  1. URL проверки безопасности "/accounts/j_spring_security_check" может быть неправильным. Вместо этого вы можете попробовать "/j_spring_security_check".

  2. Элементы <intercept-url> настроены таким образом, что для запросов к URL-адресу проверки безопасности требуются некоторые полномочия. (В этом случае, элемент catch-all для "/**" кажется проблемой.) Это неверно. Необходимо настроить элементы <intercept-url>, чтобы разрешить запросы на URL проверки безопасности, когда запрашивающий объект является анонимным.

0 голосов
/ 26 октября 2012

Кажется, что страница входа перенаправляет вас обратно на страницу входа. Вы можете использовать атрибут default-target-url в элементе form-login, чтобы указать, куда должна перейти страница после входа в систему.

Например,

<form-login default-target-url="/accounts/home" login-page="accounts/logIn" />

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