2011-07-29 11 views
5

Używam Spring MVC i Spring Security. Moje przekierowania przełączały https na http, dopóki nie znalazłem tego wpisu. Spring MVC "redirect:" prefix always redirects to http -- how do I make it stay on https?. Musiałem również ustawić właściwość redirectHttp10Compatible na false w moim AjaxUrlBasedViewResolver.Bezpieczeństwo wiosenne przejście na http po zalogowaniu. Jak mogę zachować https?

Problem polega na tym, że https nadal przełącza się na http po zalogowaniu. Po zalogowaniu mogę ustawić swoją aplikację z powrotem na https w pasku adresu i będzie ona się trzymać. Ponadto używam uwierzytelniania IP dla większości użytkowników, w którym to przypadku https pozostaje dzięki rozwiązaniu powyżej.

Próbuję dodać redirectHtp10Compatible do login_security_check lub coś podobnego, ale utknąłem. Tutaj mój security-config.xml.

<?xml version="1.0" encoding="UTF-8"?> 

<beans:beans xmlns="http://www.springframework.org/schema/security" 
     xmlns:beans="http://www.springframework.org/schema/beans" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd 
     http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"> 

<global-method-security pre-post-annotations="enabled" /> 

<http auto-config='true' access-denied-page="/login"> 
    <intercept-url pattern="/static/styles/**" filters="none" /> 
    <intercept-url pattern="/static/scripts/**" filters="none" /> 

    <intercept-url pattern="/login/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <intercept-url pattern="/error/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <intercept-url pattern="/api/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <intercept-url pattern="/ajaxTimeOut" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <intercept-url pattern="/checkSystem" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <intercept-url pattern="/adminUser/**" access="ROLE_SSADMIN" /> 
    <intercept-url pattern="/**" access="ROLE_USER" /> 

    <form-login login-page="/ajaxTimeOut" login-processing-url="/login_security_check" authentication-failure-url="/login?login_error=t" default-target-url="/" always-use-default-target="true" /> 
    <logout logout-url="/logout" logout-success-url="/"/> 
    <custom-filter position="PRE_AUTH_FILTER" ref="ipPreAuthFilter" /> 
</http> 

<beans:bean id="ipAuthDetailsSource" class="com.mydomain.security.IPBasedPreAuthenticatedDetailsSource" /> 

<beans:bean id="ipPreAuthFilter" class="com.mydomain.security.IPPreAuthenticationFilter"> 
    <beans:property name="authenticationManager" ref="preAuthManager" /> 
    <beans:property name="authenticationDetailsSource" ref="ipAuthDetailsSource" /> 
</beans:bean> 

<beans:bean id="preAuthManager" class="org.springframework.security.authentication.ProviderManager"> 
    <beans:property name="providers"> 
     <beans:list> 
      <beans:ref local="preAuthProvider"/> 
     </beans:list> 
    </beans:property> 
</beans:bean> 

<beans:bean id="preAuthProvider" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationProvider"> 
    <beans:property name="preAuthenticatedUserDetailsService" ref="preAuthUserService" /> 
</beans:bean> 

<beans:bean id="preAuthUserService" class="org.springframework.security.web.authentication.preauth.PreAuthenticatedGrantedAuthoritiesUserDetailsService" /> 

<authentication-manager> 
    <authentication-provider user-service-ref="userService"> 
     <password-encoder ref="passwordEncoder" > 
      <salt-source user-property="salt" /> 
     </password-encoder> 
    </authentication-provider> 
</authentication-manager> 

<beans:bean id="userService" class="com.mydomain.security.UserServiceImpl" /> 
<beans:bean id="passwordEncoder" class="com.mydomain.security.PasswordEncoder"> 
    <beans:constructor-arg value="256" /> 
</beans:bean> 

Dzięki.

+0

Proszę uwzględnić wszystkie istotne konfigurację Wiosna zabezpieczeń i daj nam znać jakiej wersji Spring Security używasz. –

+0

@Marc Jedno pytanie: w jaki sposób wywoływana jest strona logowania: bezpośrednio przez użytkownika (wchodzi na http (s): //.../login)? lub przechwytując żądanie do urtowanego adresu URL (użytkownik żąda http (ów): //.../ adminUser/,,,) ?, Drugie pytanie: czy użytkownik robi to przez http lub https? – Ralph

+0

Jeśli użytkownik nie ma uwierzytelnienia IP, zostanie przekierowany na stronę logowania. Jeśli są uwierzytelnione IP, przejdą do żądanej strony lub strony głównej. Użytkownik może korzystać z protokołu http lub https i potrzebuję, aby aplikacja pozostała w dowolnym protokole, z którego pochodzą. – Marc

Odpowiedz

-1

Dodać wymaga kanałowy atrybut do listy bezpiecznych adresów URL w INTERCEP URL węzły

podobnie jak ten:

<intercept-url pattern="/**" access="ROLE_USER" requires-channel="https" /> 
Powiązane problemy