2014-01-24 4 views
2

По какой-то причине моя учетная запись Spring загружается и отправляется на https, но затем 302 на странице http вызывает ошибку. Почему он не останется на https, и установите cookie с https?Spring Login On HTTPS перенаправляет на HTTP после аутентификации

POST/j_spring_security_check HTTP/1,1

HTTP/1.1 302 Found 
Server: Apache-Coyote/1.1 
Set-Cookie: JSESSIONID=9F9847C75A448A14CF631DBBD2F0E6A1; Path=/; HttpOnly 
Location: http://example.com/ 
Content-Length: 0 
Date: Fri, 24 Jan 2014 21:30:55 GMT 

Config

<http pattern="/services/**" create-session="stateless" entry-point-ref="basicAuthAwareAuthenticationEntryPoint"> 
        <http-basic/> 
        <intercept-url pattern="/services/**" access="ROLE_SERVICE" /> 
     </http> 

     <http auto-config="true"> 
       <intercept-url pattern="/index.*" access="ROLE_USER" /> 
       <intercept-url pattern="/welcome.htm" access="ROLE_USER" /> 
       <intercept-url pattern="/changePassword.htm" access="ROLE_USER" /> 
       <intercept-url pattern="/admin/**" access="ROLE_USER" /> 
       <intercept-url pattern="/notifications/**" access="ROLE_ANONYMOUS,ROLE_USER" /> 
       <intercept-url pattern="/logging/**" access="ROLE_USER" /> 
       <form-login login-page="/login.htm" default-target-url="/admin/viewInstitutions.htm" 
        authentication-failure-url="/loginfailed.htm" /> 
       <logout logout-success-url="/logout.htm" /> 
     </http> 
+0

Вы нашли решение для этого? У меня есть аналогичная проблема, когда она перенаправляется обратно на http. Я попробовал второй ответ здесь, но, похоже, не помог в моем случае и не был уверен, где разместить атрибут require-channel = "https". – Aaron

ответ

0
  1. Вы можете добавить в перехватывают для URL тега requires-channel="https" атрибута или просто установить forceHttps=true на вашей аутентификации точки входа
  2. Вы можете суммарно отключить HTTP для сервера
0

У нас была аналогичная проблема на моей конфигурации Heroku, в конце концов, это было то, что Heroku заканчивал соединение HTTPS и отправки соединение HTTP к серверу приложений.

По умолчанию URL-адрес неудачи и успеха в Spring Security не включает имя сервера (то есть successHandler.defaultTargetUrl='/' или successHandler.ajaxSuccessUrl='/login/ajaxSuccess').

Это означает, что, когда Handler определяет URL, чтобы направить (здесь):

https://github.com/spring-projects/spring-security/blob/master/web/src/main/java/org/springframework/security/web/authentication/AbstractAuthenticationTargetUrlRequestHandler.java#L69

Он будет использовать запрос, чтобы построить абсолютный URL, как показано здесь:

https://github.com/spring-projects/spring-security/blob/master/web/src/main/java/org/springframework/security/web/DefaultRedirectStrategy.java#L31

Мне удалось решить проблему, указав redirectUrls как абсолютное, для приложения Grails (но вы можете легко преобразовать его в стандартное приложение Spring), оно будет выглядеть так:

staging { 
    grails.serverURL = "https://staging.myapp.com" 
    grails.plugin.springsecurity.successHandler.defaultTargetUrl = "${grails.serverURL}/" 
    grails.plugin.springsecurity.successHandler.ajaxSuccessUrl = "${grails.serverURL}/login/ajaxSuccess" 
    grails.plugin.springsecurity.failureHandler.defaultFailureUrl = "${grails.serverURL}/login/authfail?login_error=1" 
    grails.plugin.springsecurity.failureHandler.ajaxAuthFailUrl = "${grails.serverURL}/login/authfail?ajax=true" 
    ... 
} 
Смежные вопросы