Grails Spring Security Shiro, как создать 2 формы входа в систему с 2 различными URL-адресами успешной аутентификации? - PullRequest
0 голосов
/ 01 декабря 2018

Я работаю над проектом, который использует Spring Security Shiro.Я хотел бы настроить приложение так, чтобы оно имело 2 разные формы входа в систему с 2 разными URL-адресами успешной аутентификации.Каков наилучший способ выполнить это?Я посмотрел документацию, но не нашел никаких решений.

Заранее благодарю за помощь.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Простой способ состоял в том, чтобы переопределить AuthenticationSuccessHandler с помощью пользовательского.

Сначала создайте свой обработчик успеха, мои проверки, чтобы увидеть, является ли пользователь администратором.

import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler
import org.springframework.security.core.Authentication

import javax.servlet.ServletException
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
import javax.servlet.http.HttpSession


class CustomAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {

    def requestCache
    boolean administrator = false

    @Override
    protected String determineTargetUrl(HttpServletRequest request, HttpServletResponse response) {
        println administrator
        if(administrator){
            return "/admin"
        } else {
            return super.determineTargetUrl(request, response)
        }
    }

    @Override
    public void onAuthenticationSuccess(final HttpServletRequest request, final HttpServletResponse response,
                                        final Authentication authentication) throws ServletException, IOException {
        try {
            checkSetAdministratorUser(authentication)
            handle(request, response, authentication)
            super.clearAuthenticationAttributes(request)
        }catch(Exception e){
            e.printStackTrace()
        } finally {
            // always remove the saved request
            requestCache.removeRequest(request, response)
        }

    }

    protected void handle(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
            throws IOException, ServletException {
        String targetUrl = determineTargetUrl(request, response)

        if (response.isCommitted()) {
            logger.debug("Response has already been committed. Unable to redirect to " + targetUrl)
            return
        }

        redirectStrategy.sendRedirect(request, response, targetUrl)
    }

    def checkSetAdministratorUser(authentication){
        authentication.authorities.each(){ authority ->
            if(authority.authority == "ROLE_ADMIN")administrator = true
        }
    }
}

ЗатемЯ должен был определить обработчик успеха в разделе bean-компонентов resources.groovy

beans = {
    authenticationSuccessHandler(CustomAuthenticationSuccessHandler) {
        requestCache = ref('requestCache')
        redirectStrategy = ref('redirectStrategy')
    }
}

Тогда я был в порядке.Это хорошо сработало для моего сценария.

Спасибо: https://groggyman.com/2015/04/05/custom-authentication-success-handler-with-grails-and-spring-security/

0 голосов
/ 03 декабря 2018

Самый простой и лучший способ - расширить два отдельных WebSecurityConfigurerAdapter и создать там две разные конфигурации (две страницы входа и два URL-адреса успешной аутентификации):

@Configuration
@Order(94)
public class WebSecurityConf1 extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/first-resources**").formLogin().successForwardUrl();
    }
}

и

@Configuration
@Order(95)
public class WebSecurityConf2 extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/second-resources**").formLogin().successForwardUrl();
    }
}

Обратите внимание, что WebSecurityConf1 будет применяться, когда удовлетворено .antMatcher("/first-resources**") и то же самое для WebSecurityConf2.Кроме того, конфигурация между WebSecurityConf1 и WebSecurityConf2 не зависит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...