Spring Security ip验证 当前用户获取不到

渺万里层云 2015-08-04 05:57:09
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);
...全文
341 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Golden_Dog 2015-08-08
  • 打赏
  • 举报
回复
引用 2 楼 lishufenggreat 的回复:
[quote=引用 1 楼 u011385186 的回复:] 具体不清楚,ip登陆和密码登陆没有什么区别啊。就是请求之后,根据ip判定是否是合乎要求的ip,然后把ip存入session即可。 你之所以会需要延迟才能够登陆是因为第一次登陆的时候还没生成好sessionid放回cookie。 像你这种最好自定义返回sessionid,具体规则应该是通过ip来写。这样就不会出现第一次请求请求不上的情况了。
谢谢您,我先根据您的方法试试哈~ [/quote] sorry,之前回答没有细想。虽然不清楚你是怎么实现登录验证的。有个思路你可以参考一下,由于你是ip登录,那么所有的网址都需要可以直接ip正确就能够登录。所以呢,你不可能弄个登录界面。那么就弄个过滤器来对每个请求进行拦截处理:如果ip符合数据库中记录的所有ip,那么就放行。
渺万里层云 2015-08-07
  • 打赏
  • 举报
回复
引用 1 楼 u011385186 的回复:
具体不清楚,ip登陆和密码登陆没有什么区别啊。就是请求之后,根据ip判定是否是合乎要求的ip,然后把ip存入session即可。 你之所以会需要延迟才能够登陆是因为第一次登陆的时候还没生成好sessionid放回cookie。 像你这种最好自定义返回sessionid,具体规则应该是通过ip来写。这样就不会出现第一次请求请求不上的情况了。
谢谢您,我先根据您的方法试试哈~
Golden_Dog 2015-08-04
  • 打赏
  • 举报
回复
具体不清楚,ip登陆和密码登陆没有什么区别啊。就是请求之后,根据ip判定是否是合乎要求的ip,然后把ip存入session即可。 你之所以会需要延迟才能够登陆是因为第一次登陆的时候还没生成好sessionid放回cookie。 像你这种最好自定义返回sessionid,具体规则应该是通过ip来写。这样就不会出现第一次请求请求不上的情况了。

50,754

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧