这可能听起来很傻,但我遇到了这种行为。我正在使用jndi进行ldap身份验证。我有一个演示程序设置,其中身份验证在提供不正确的凭据时失败,但在spring控制器方法中似乎也是如此(我正在从react应用程序进行post调用)。
纯java实现
import java.util.Properties;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class Demo {
public static void main(String[] args) {
Properties environment = new Properties();
String userDomain = "@region.company.net";
environment.setProperty(DirContext.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
environment.setProperty(DirContext.PROVIDER_URL, "ldap://region.company.net:3268");
environment.setProperty(DirContext.SECURITY_AUTHENTICATION, "simple");
environment.setProperty(DirContext.SECURITY_PRINCIPAL, "userId"+userDomain);
environment.setProperty(DirContext.SECURITY_CREDENTIALS, "wrongPassword");
try {
DirContext context = new InitialDirContext(environment);
System.out.println("Authentication Successful !!!\n\n");
} catch (NamingException e) {
System.out.println("Authentication Failed !!!\n\n");
e.printStackTrace();
}
}
}
控制器实现
@PostMapping("/authenticateUser")
public String authenticateUser(@RequestBody HashMap<String, String> user) {
Properties environment = new Properties();
String userDomain = "@region.company.net";
environment.setProperty(DirContext.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
environment.setProperty(DirContext.PROVIDER_URL, "ldap://region.company.net:3268");
environment.setProperty(DirContext.SECURITY_AUTHENTICATION, "simple");
// environment.setProperty(DirContext.SECURITY_PRINCIPAL, "userId"+userDomain);
environment.setProperty(DirContext.SECURITY_CREDENTIALS, "wrongPassword");
try {
DirContext context = new InitialDirContext(environment);
System.out.println("Authentication Successful !!!\n\n");
} catch (NamingException e) {
System.out.println("Authentication Failed !!!\n\n");
e.printStackTrace();
}
return "Method executed successfully";
}
在提供了错误的密码之后,如果我执行这个代码,它就会打印出来 Authentication Failed !!!
这是预期的,但当我在控制器的方法中插入相同的代码时,它会打印出来 Authentication Successful !!!
.
两个人的行为不应该是一样的吗?我觉得这种行为很奇怪。也许,我忽略了什么?
编辑1:开始
它显示了设置 SECURITY_PRINCIPAL
在Spring控制器的情况下被注解掉了。我已经注解掉了那部分代码。这就引出了另一个问题,为什么它从来没有抛出任何异常?不知道我是否应该在另一个帖子里问这个问题。
通过传递进行身份验证是否合适 Username
(就像@xyz.com)作为 SECURRITY_PRINCIPAL
还是应该通过入口通道?
编辑1:结束
暂无答案!
目前还没有任何答案,快来回答吧!