Grails-Acegi,如何在身份验证期间将用户重定向到不同的域?

Grails-Acegi,如何在身份验证期间将用户重定向到不同的域?,grails,spring-security,Grails,Spring Security,我继承了一个Grails应用程序,它使用Acegi 0.5.3插件 该应用程序可以通过两个完全不同的URL访问,例如app.domainone.com和app.domaintwo.com。域名映射到两个不同的用户社区。现在我的任务是限制用户仅从与其相关的域访问。目前,用户可以访问任何域并登录到应用程序 我有一些关于Acegi如何工作的线索,但不能说我完全理解。所以我想问我如何才能做到这一点 在理想情况下,当用户尝试登录时,我希望重定向(如果需要)到他们的“相关”域,并使用他们给定的凭据自动登录。

我继承了一个Grails应用程序,它使用Acegi 0.5.3插件

该应用程序可以通过两个完全不同的URL访问,例如app.domainone.com和app.domaintwo.com。域名映射到两个不同的用户社区。现在我的任务是限制用户仅从与其相关的域访问。目前,用户可以访问任何域并登录到应用程序

我有一些关于Acegi如何工作的线索,但不能说我完全理解。所以我想问我如何才能做到这一点


在理想情况下,当用户尝试登录时,我希望重定向(如果需要)到他们的“相关”域,并使用他们给定的凭据自动登录。但是,作为一种临时解决方案,即使是简单地重定向到相关的登录页面也足够了。

下面是我的CustomAuthenticationProcessingFilter。可能有更好的解决方案,但这对我了解Grails和Spring安全性的知识很少有帮助

    class CustomAuthenticationProcessingFilter extends GrailsAuthenticationProcessingFilter implements
    InitializingBean {

        //def authenticationManager
        @Override
        public int getOrder() {
            return FilterChainOrder.AUTHENTICATION_PROCESSING_FILTER
        }

        @Override
        void doFilterHttp(HttpServletRequest request,
        HttpServletResponse response, FilterChain chain) throws IOException,
        ServletException {
            if (SecurityContextHolder.getContext().getAuthentication() == null) {
                def loginUrl = "${request.getRequestURL().toString() - request.getRequestURI().toString()}${request.contextPath}"
                def username = request.getParameter("j_username")
                def password = request.getParameter("j_password")

                if ( loginUrl && username && password) {
                    def user = User.findByEmailOrCompanyEmail(username,username)
                    if(user) {
                        def query = """select c from Community c, UserCommunity uc
                                        where c.id = uc.comm.id
                                        and uc.user.id = :userId"""
                        def comm = Community.executeQuery(query,[userId:user.id])
                        comm = comm?(comm?.get(0)):null
                        if(loginUrl!=comm?.url) {
                            println "Trying to login using the wrong URL"
                            response.sendRedirect(comm.url+'/login/auth')
                            return
                        }

                    }
                }
            }
//Resume the normal flow
            super.doFilterHttp(request, response, chain)
        }

        @Override
        public void afterPropertiesSet() throws Exception {
            // TODO Auto-generated method stub

        }

    }