2012-03-07 9 views
1

Acegi 0.5.3プラグインを使用するGrailsアプリケーションを継承しました。Grails - Acegi、認証中にユーザーを別のドメインにリダイレクトする方法は?

完全に異なる2つのURL(app.domainone.com、app.domaintwo.comなど)からアプリケーションにアクセスできます。ドメイン名は、2つの異なるユーザーコミュニティにマップされます。今私は、関連するドメインからのユーザーアクセスを制限することを任されています。現時点では、ユーザーは任意のドメインにアクセスしてアプリケーションにログインできます。

私はAcegiがどのように動作するかについていくつかの手掛かりを持っていますが、私はまだそれをすべて理解しているとは言えません。だから私はこれをどのように達成できるかを尋ねたかったのです。

ユーザーがログインしようとすると、(必要な場合)「関連する」ドメインにリダイレクトして、指定した資格情報で自動的にサインインしたいと考えています。しかし、暫定的な解決策として、関連するログインページへの単純なリダイレクトでさえ十分です。

答えて

0

ここに私のCustomAuthenticationProcessingFilterがあります。そこにはおそらくもっと良い解決策がありますが、これは私がGrailsとSpring Securityについて知っている少しの知識で私を助けました。

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 

     } 

    } 
関連する問題