Подтвердить что ты не робот

Spring Условные настройки безопасности по умолчанию-target-url

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

<http auto-config="true" use-expressions="true">
        <custom-filter ref="filterSecurityInterceptor" before="FILTER_SECURITY_INTERCEPTOR"/>
        <access-denied-handler ref="accessDeniedHandler"/>
        <form-login
            login-page="/login"
            default-target-url="/admin/index"
            authentication-failure-url="/index?error=true"
            />
        <logout logout-success-url="/index" invalidate-session="true"/>
</http>

Я думал, что этот вопрос может быть в той же строке, что и я. Кто-нибудь знает, как я могу применить его, хотя?

РЕДАКТИРОВАТЬ 1

<bean id="authenticationProcessingFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="authenticationSuccessHandler" ref="authenticationSuccessHandler"/>
</bean>
<bean id="authenticationSuccessHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler">
    <property name="defaultTargetUrl" value="/login.jsp"/>
</bean>

РЕДАКТИРОВАТЬ 2

В настоящее время у меня нет класса типа public class Test implements AuthenticationSuccessHandler {}, как показано в этом примере.

4b9b3361

Ответ 1

Я тестировал код, и он работает, там нет ракетостроения

public class MySuccessHandler implements AuthenticationSuccessHandler {

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request,
            HttpServletResponse response, Authentication authentication)
            throws IOException, ServletException {
        Set<String> roles = AuthorityUtils.authorityListToSet(authentication.getAuthorities());
        if (roles.contains("ROLE_ADMIN")){
            response.sendRedirect("/Admin.html");   
            return;
        }
        response.sendRedirect("/User.html");
    }    
}

Изменения в контексте безопасности:

<bean id="mySuccessHandler" class="my.domain.MySuccessHandler">
    </bean>

<security:form-login ... authentication-success-handler-ref="mySuccessHandler"/>

обновить, если вы хотите использовать подход default-target-url, он будет работать одинаково хорошо, но будет запущен, когда ваш пользователь сначала обратится к странице входа:

<security:form-login default-target-url="/welcome.htm" />

@Controller
public class WelcomeController {
    @RequestMapping(value = "/welcome.htm")
    protected View welcome() {

        Set<String> roles = AuthorityUtils
                .authorityListToSet(SecurityContextHolder.getContext()
                        .getAuthentication().getAuthorities());
        if (roles.contains("ROLE_ADMIN")) {
            return new RedirectView("Admin.htm");
        }
        return new RedirectView("User.htm");
    }
}