gpt4 book ai didi

security - 自定义身份验证

转载 作者:行者123 更新时间:2023-12-02 15:39:55 26 4
gpt4 key购买 nike

我的系统有2个子系统。每个子系统都有不同的用户集。每个用户都有一个额外的字段“SystemName”,可用于了解该用户所属的系统。

在登录表单(每个子系统1个表单)中,我添加了一个隐藏字段,用于指定表单的类型(包含SystemName值)。

通常,检查非常简单:

if (user.systemName == params.systemName) {
proceed with regular login
} else {
throw standard login error
}

我尝试将这张支票放到我的自定义DaoAuthenticationProvider中,但是它无法访问“params.systemName”。

我应将代码放在哪里,以使Acegi通过此支票对用户进行身份验证?

提前致谢。

最佳答案

这就是我在Java中所做的。扩展 WebAuthenticationDetails :

import javax.servlet.http.HttpServletRequest;
import org.acegisecurity.ui.WebAuthenticationDetails;

public class SystemNameWebAuthenticationDetails extends WebAuthenticationDetails {

public SystemNameWebAuthenticationDetails() {
super();
}

public SystemNameWebAuthenticationDetails(HttpServletRequest request) {
super(request);
this.systemName = request.getParameter("systemName");
}

public String getSystemName() {
return systemName;
}

private String systemName;
}

在验证过滤器中进行设置:
<bean id="authenticationProcessingFilter"
class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
...
<property name="authenticationDetailsSource">
<bean class="org.acegisecurity.ui.AuthenticationDetailsSourceImpl">
<property name="clazz" value="SystemNameWebAuthenticationDetails"/>
</bean>
</property>
</bean>

稍后,您可以在身份验证过程中访问该属性,向身份验证对象询问详细信息。或这样做:
SecurityContextHolder.getContext().getAuthentication().getDetails()

关于security - 自定义身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1754217/

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