2015-03-18 3 views
1

Я впервые использую веб-приложение с использованием Java и Spring MVC. Я также внедрил для этого функцию входа в систему. Но в этом я столкнулся с проблемой.После успешного входа в систему с помощью Spring MVC я могу вернуться на страницу входа

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

В идеале он должен перейти на целевую страницу по умолчанию. Bellow - это мой файл настроек XML. Спасибо за любую помощь заранее.

XML Config:

<http pattern="/resources/**" security="none" /> 
 
<http pattern="/admin/login" security="none" /> 
 
<http pattern="/admin/login/failed" security="none" /> 
 
<http pattern="/admin/login/invalidsession" security="none" /> 
 

 
<http auto-config="true" use-expressions="false"> 
 
\t <intercept-url pattern="/admin/**" access="ROLE_USER" /> 
 
\t <form-login login-page="/admin/login" default-target-url="/admin/student" authentication-failure-url="/admin/login/failed" /> 
 
\t <logout logout-success-url="/admin/login" delete-cookies="JSESSIONID" /> 
 
\t <session-management session-fixation-protection="newSession" invalid-session-url="/admin/login/invalidsession"> 
 
     \t <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /> 
 
    </session-management> 
 
</http> 
 

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

ОТВЕТ:

После получения предложений от JGR и Павла, наконец, я смог сделать это. Здесь мне пришлось изменить конфигурацию XML, так как я сделал страницы входа в систему как безопасность «none». Таким образом, при получении типа аутентификации для этой страницы, используя следующий код:

Authentication auth = SecurityContextHolder.getContext(). GetAuthentication();

Затем я получал null. Поэтому, чтобы избежать этого, мне пришлось изменить настройки XML, как показано ниже.

Обновленный XML Config:

<?xml version="1.0" encoding="UTF-8"?> 
 
<beans xmlns="http://www.springframework.org/schema/beans" 
 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 
     xmlns:security="http://www.springframework.org/schema/security" 
 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
 
          http://www.springframework.org/schema/beans/spring-beans.xsd 
 
          http://www.springframework.org/schema/security 
 
          http://www.springframework.org/schema/security/spring-security-3.2.xsd"> 
 

 
    <security:global-method-security secured-annotations="enabled" /> 
 
    
 
    <security:http auto-config="true"> 
 
     <!-- Restrict URLs based on role --> 
 
     <security:intercept-url pattern="/admin/login" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
 
     <security:intercept-url pattern="/admin/login/failed" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
 
     <security:intercept-url pattern="/admin/login/invalidsession" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
 
     <security:intercept-url pattern="/resources/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
 

 
     <security:intercept-url pattern="/admin/**" access="ROLE_USER" /> 
 

 
     <!-- Override default login and logout pages --> 
 
     <security:form-login login-page="/admin/login" 
 
          default-target-url="/admin/student" 
 
          authentication-failure-url="/admin/login/failed" /> 
 
     <security:logout logout-success-url="/admin/login" delete-cookies="JSESSIONID" /> 
 
     <security:session-management session-fixation-protection="newSession" invalid-session-url="/admin/login/invalidsession"> 
 
     \t <security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /> 
 
    \t </security:session-management> 
 
    </security:http> 
 

 
    <security:authentication-manager> 
 
     <security:authentication-provider> 
 
\t \t \t <security:user-service> 
 
\t \t \t \t <security:user name="roul" password="roul" authorities="ROLE_USER" /> 
 
\t \t \t </security:user-service> 
 
\t \t </security:authentication-provider> 
 
    </security:authentication-manager> 
 

 
</beans>

ПРИМЕЧАНИЕ: Я упомянул следующие URL: http://www.springbyexample.org/examples/simple-spring-security-webapp-spring-config.html

ответ

2

Просто добавьте код в ваш "/ администратора/входа в систему" контроллера где вы проверяете, зарегистрирован ли пользователь.

Authentication auth = SecurityContextHolder.getContext().getAuthentication(); 

    if (!(auth instanceof AnonymousAuthenticationToken)) 
    { 
     return "redirect:/admin/student"; 
    } 
0

Вы можете выполнить это с помощью authenticationsuccesshandler =

Это сообщение объясняет How to redirect to the homepage if the user accesses the login page after being logged in?

<beans:bean id="authenticationSuccessHandler" 
    class="com.example.spring.security.MyAuthenticationSuccessHandler"> 
<beans:property name="defaultTargetUrl" ref="defaultTargetUrl" /> 

Spring Security - Redirect if already logged in

+0

Эй, похоже, сообщение очень старое, и они описали решение для очень старой версии. Пожалуйста, предложите что-нибудь для весенней безопасности 3.2.6.RELEASE. – Roul

+0

Я сделал некоторые исследования. Это, кажется, общий вопрос с весной. Пройдя эти должности, я не видел другого утверждения ... –

+0

вы пробовали проверить в пользователе в контексте безопасности, как упоминание в этом сообщении? –

Смежные вопросы