Вопрос по spring-security – Могу ли я использовать одну страницу входа, чтобы перенаправить другую страницу с помощью Spring 3.0 Security ..? [Дубликат]

0

Possible Duplicate:
Setting custom Post-Login Destinations based on user ROLES using spring security

Я делаю свой проект на Java, используя Spring. Я использую весеннюю безопасность в своем проекте.

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

Теперь я использую приведенный ниже код в файл spring-servlet.xml. Поэтому, пожалуйста, предложите мне какое-то решение по этому вопросу.

<security:http auto-config="true">
    <security:intercept-url pattern="/airline/*" access="ROLE_USER" />
    <security:form-login login-page="/login" default-target-url="/logout"
        authentication-failure-url="/login" />
    <security:logout logout-success-url="/logout" />
</security:http>

<security:authentication-manager>
   <security:authentication-provider>
    <security:jdbc-user-service data-source-ref="dataSrc"
       users-by-username-query="select username,password,enabled from spring_users where username=?" 
       authorities-by-username-query="select u.username, ur.authority from spring_users u, spring_roles ur where u.user_id=ur.user_id and u.username=?"/>
   </security:authentication-provider>
</security:authentication-manager>

Ваш Ответ

1   ответ
4

Если вы хотите управлять потоком навигации после успешной аутентификации, вы можете сделать это, добавив свой собственный AuthenticationSuccessHandler.

Добавьте следующий атрибут к вашему<form-login> element который ссылается на bean-компонент customAuthenticationHandler,

<form-login login-page="/login.xhtml" authentication-success-handler-ref="customAuthenticationHandler"/>
...
</http>
<beans:bean id="customAuthenticationHandler" class="com.examples.CustomAuthenticationHandler" />

Класс CustomAuthenticationHandler выглядит следующим образом:

public class CustomAuthenticationHandler extends SimpleUrlAuthenticationSuccessHandler{

@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
        Authentication authentication) throws ServletException, IOException {
        String userTargetUrl = "/welcome.xhtml";
        String adminTargetUrl = "/admin/welcome.xhtml";
        Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities());
        if (roles.contains("ROLE_ADMIN")) {
            getRedirectStrategy().sendRedirect(request, response, adminTargetUrl);
        }
        else if(roles.contains("ROLE_USER")) {
            getRedirectStrategy().sendRedirect(request, response, userTargetUrl);
        }
        else {
            super.onAuthenticationSuccess(request, response, authentication);
            return;
        }
 }

}

Похожие вопросы