如果在java spring安全中登录身份验证失败,如何获取匿名用户用户名?
我正在与过去几周的一个问题作斗争。请帮忙 org.springframework.security.web.authentication.AnonymousAuthenticationFilter -使用匿名令牌填充SecurityContextHolder:'org.springframework.security.authentication。AnonymousAuthenticationToken@905571d8: 负责人:匿名用户;凭据:[受保护];认证: 是的;细节: org.springframework.security.web.authentication。WebAuthenticationDetails@0: RemoteIP地址:0:0:0:0:0:0:0:0:0:1;会话ID: 879CE33EC09255373A6D10FAF8B12E6;授予的权限:角色\u匿名' 如果我输入了正确的用户名和错误的密码,我想知道为什么用户名是匿名用户 我想获得我在登录页面中输入的用户名。 Ex-如果我在用户名中输入了admin,并且密码不正确,则用户名应为admin而非anonymousUser 当我执行如果在java spring安全中登录身份验证失败,如何获取匿名用户用户名?,java,spring,spring-security,Java,Spring,Spring Security,我正在与过去几周的一个问题作斗争。请帮忙 org.springframework.security.web.authentication.AnonymousAuthenticationFilter -使用匿名令牌填充SecurityContextHolder:'org.springframework.security.authentication。AnonymousAuthenticationToken@905571d8: 负责人:匿名用户;凭据:[受保护];认证: 是的;细节: org.spr
auth.getName()时代码>然后我也得到了匿名用户
请帮忙
Login.jsp
<form method="post" action="<c:url value='j_spring_security_check' />">
<div class="row">
<div class="col-md-offset-5 col-md-3">
<div><h2>Login Here</h2> </div>
<div class="form-login">
<h4 style="color: red">${message}</h4>
<input type="text" name="username" id="userName" class="form-control input-sm chat-input" placeholder="Username" required="required" pattern="[0-9]{0,10}" title="Username should not be greater than 10 letters and it should be Alps ID"/>
</br>
<input type="password" name="password" id="userPassword" class="form-control input-sm chat-input" placeholder="Password" required="required" pattern="[A-Za-z0-9!$#%]{8,20}" title="Password should contain A-Z a-z 0-9 ! $ # %"/>
</br>
<!-- <!-- CAPTCHAA -->
<div class="wrapper">
<span class="group-btn">
<input type="submit" id="login" value="Login" class="btn btn-primary btn-md"/><!-- <a href="#" class="btn btn-primary btn-md">login <i class="fa fa-sign-in"></i></a> -->
</span>
</div>
</div>
</div>
</div>
</form>
当身份验证失败时,它将转到上面的方法,如果我使用request.getParameter('username');我得到空值。它只是一个表单帖子,因此您可以从请求的参数中获取它
默认情况下,使用request.getParameter(“j_用户名”)。如果为参数“username”配置自定义名称,则使用request.getParameter(“[custom\u param\u name]”)
好的,在Spring security重定向回登录页面进行失败的身份验证后,您正在尝试获取用户名。您使用的是哪个Spring安全版本?如果在3.1.0之前,您可以从会话属性SPRING\u SECURITY\u LAST\u USERNAME获取它。如果没有,您可以实现AuthenticationFailureHandler以在会话中缓存它。有关详细信息,请参见:使用匿名身份验证过滤器
您将始终得到一个默认主体为“anonymousUser”的匿名身份验证令牌
因此,您可以通过构造函数调整主体,但它始终是相同的值。
也许AnonymousAuthenticationFilter不适合您的用例。谢谢您的回答。您能建议一些方法吗?当身份验证失败时,我如何获取输入用户名的值?我已经添加了我的Login.jsp和LoginController.java中的方法,在身份验证失败后,该方法将被添加到Login.java中。好的,所以您正在尝试在Spring security重定向回登录页面后获取用户名,以获取失败的用户名认证。您使用的是哪个Spring安全版本?如果在3.1.0之前,您可以从会话属性SPRING\u SECURITY\u LAST\u USERNAME
中获取它。如果没有,您可以实现AuthenticationFailureHandler
将其缓存在会话中。有关详细信息,请参阅:
@RequestMapping("login")
public ModelAndView getLoginForm(
String authfailed,
String logout, String denied,HttpServletRequest request, HttpServletResponse response)
throws ClassNotFoundException, SQLException, UsernameNotFoundException, IOException {
String message = "";
if (authfailed != null) {
message = "Invalid username or password, try again !";
HttpSession session = request.getSession(true);
String uname = (String) session.getAttribute("username");
PrintWriter out = new PrintWriter(System.out);
//response.sendRedirect("/incidentManagementPortal/PasswordReset");
} else if (logout != null) {
request.getSession().invalidate();
eraseCookie(request,response);
message = "Logged Out successfully, login again to continue !";
} else if (denied != null) {
message = "Access denied for this user !";
}
return new ModelAndView("login", "message", message);
}
public AnonymousAuthenticationFilter(String key) {
this(key, "anonymousUser", AuthorityUtils.createAuthorityList("ROLE_ANONYMOUS"));
}
protected Authentication createAuthentication(HttpServletRequest request) {
AnonymousAuthenticationToken auth = new AnonymousAuthenticationToken(key, principal, authorities);
auth.setDetails(authenticationDetailsSource.buildDetails(request));
return auth;
}