Spring Security ip验证 当前用户获取不到
SecurityContext securityContext = (SecurityContext) hRequest
.getSession().getAttribute(
SystemConstant.SPRING_SECURITY_CONTEXT);
PdsUser user = null;
if (securityContext != null)
user = (PdsUser) securityContext.getAuthentication().getPrincipal();
我用这个代码来获取登录用户。使用的是ip验证。使用密码验证获取登录用户没问题,ip验证确有问题。
具体是这样的,ip通过spring验证之后登录进来,session里是有用户的,此后对所执行的方法要一一过滤验证,要获取用户,但是获取不到。
网上说这种写法有问题,但没搜到正确的写法。各位大神谁知道怎么获取呢?
我尝试debug的时候,发现debug状态下有时候能够获取到用户,于是在验证登录的时候加了线程延迟,这样就可以获取到用户了,但我不敢确定这样一定能在特定时间内获取到,怕是治标不治本,不知各位大神可有什么办法,不胜感激!!!
@Override
public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException {
log.info("====>attemptAuthentication!!!!!!!拦截登录!!!");
String type = request.getParameter("type");
Md5PasswordEncoder md5PasswordEncoder = new Md5PasswordEncoder();
if (ELoginType.IP.name().equals(type)) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(
SystemUtil.parseClientIp(request) + ","
+ SystemConstant.PDS_IP_USER,
md5PasswordEncoder.encodePassword(
request.getParameter("j_password"), null));
AuthenticationManager authenticationManager = this
.getAuthenticationManager();
setDetails(request, authRequest);
return authenticationManager.authenticate(authRequest);
.getSession().getAttribute(
SystemConstant.SPRING_SECURITY_CONTEXT);
PdsUser user = null;
if (securityContext != null)
user = (PdsUser) securityContext.getAuthentication().getPrincipal();
我用这个代码来获取登录用户。使用的是ip验证。使用密码验证获取登录用户没问题,ip验证确有问题。
具体是这样的,ip通过spring验证之后登录进来,session里是有用户的,此后对所执行的方法要一一过滤验证,要获取用户,但是获取不到。
网上说这种写法有问题,但没搜到正确的写法。各位大神谁知道怎么获取呢?
我尝试debug的时候,发现debug状态下有时候能够获取到用户,于是在验证登录的时候加了线程延迟,这样就可以获取到用户了,但我不敢确定这样一定能在特定时间内获取到,怕是治标不治本,不知各位大神可有什么办法,不胜感激!!!
@Override
public Authentication attemptAuthentication(HttpServletRequest request,
HttpServletResponse response) throws AuthenticationException {
log.info("====>attemptAuthentication!!!!!!!拦截登录!!!");
String type = request.getParameter("type");
Md5PasswordEncoder md5PasswordEncoder = new Md5PasswordEncoder();
if (ELoginType.IP.name().equals(type)) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(
SystemUtil.parseClientIp(request) + ","
+ SystemConstant.PDS_IP_USER,
md5PasswordEncoder.encodePassword(
request.getParameter("j_password"), null));
AuthenticationManager authenticationManager = this
.getAuthenticationManager();
setDetails(request, authRequest);
return authenticationManager.authenticate(authRequest);
...全文
相关推荐
Spring Security OAuth2集成短信验证码登录以及第三方登录
Spring Security OAuth2集成短信验证码登录以及第三方登录Spring Security OAuth2是基于Spring Cloud/Spring Boot环境下使用OAuth2.0
关于ip的过滤器 spring security例子
本文将深入探讨如何在Spring Security中实现IP过滤器,以便控制访问应用的客户端IP地址。首先,我们需要理解Spring Security的基本架构。
拒绝访问异常处理(AccessDeniedException)_spring security例子
该项目演示了如何在Spring Security中处理AccessDeniedException异常,实现对未授权用户的访问控制。通过web.xml集成Spring Security过滤器链,并结合d
spring获取weblogic jndi数据源的两种方式
在这种模式下,Spring可以通过简单的JNDI名称查找来获取数据源,而无需指定任何连接细节如用户名、密码或IP地址和端口号等。这种方式的优点是简单且易于配置。
spring,获取IP精选.doc
**Spring Security**: 如果应用集成了 Spring Security,可以使用 `SecurityContextHolder.getContext().getAuthentication


