gpt4 book ai didi

grails - Grails-Acegi,如何在身份验证期间将用户重定向到其他域?

转载 作者:行者123 更新时间:2023-12-02 14:55:00 25 4
gpt4 key购买 nike

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

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

我对Acegi的工作原理有一些了解,但是不能说我了解所有这些。因此想问一下我将如何实现这一目标。

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

最佳答案

这是我的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

}

}

关于grails - Grails-Acegi,如何在身份验证期间将用户重定向到其他域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9604602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com