今天踩坑,写一跨域登陆,
开始如下:
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
SecurityUtils.getSecurityManager().login(SecurityUtils.getSubject(), token);
登陆是登陆成功了,但是后续获取SecurityUtils.getSubject().getPrincipal()始终为null,百思不得骑姐。各种改配置,各种重写,后来才发现是登陆这里写错了,特的写个博客,加深下映象。
SecurityUtils.getSubject().login(token);
从字面上还是很好理解的。Subject().login(token)在当前线程登陆用户,一但登陆成功就把登陆信息绑定到当前线程.
SecurityManager().login(token)这个通过安全管理器登陆用一个用户,登陆后在session中这个用户是已经登陆了,但不是指当前线程的用户登陆,所以通过当前线程去获取用户属性肯定就是没有了。