shiro的perms拦截,principalCollection都等于123

yongzhong 发布于 2013/11/27 21:47
阅读 1K+
收藏 0

以前配好的时候是没有问题的,现在在把他加载到项目里后发现无论是否有账户登录


public class ShiroDbRealm extends AuthorizingRealm {
 
 private UserService userService;
 
 /**
 * 自定义的指定Shiro验证用户登录的类
 */
 @Override
 protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
 String currentUserName = (String) super.getAvailablePrincipal(principalCollection);
 SimpleAuthorizationInfo simpleAuthorInfo = new SimpleAuthorizationInfo();
 //实际中可能会像上面注释的那样从数据库取得  
 System.out.println("当前用户"+currentUserName);
 return null;
 }


 /**
 * 验证当前登录的Subject
 * 
 */
 @Override
 protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
 UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
 Users user = userService.findUserByName(token.getUsername());
 if (null != user) {
 AuthenticationInfo authcInfo = new SimpleAuthenticationInfo(user.getUserName(), user.getUserPassword(), "昵称或真实姓名");
 this.setSession("currentUser", user);
 return authcInfo;
 } else {
 return null;
 }
 }


 /**
 * 将一些数据放到ShiroSession中,以便于其它地方使用
 * 
 * @see 比如Controller,使用时直接用HttpSession.getAttribute(key)就可以取到
 */
 private void setSession(Object key, Object value) {
 Subject currentUser = SecurityUtils.getSubject();
 if (null != currentUser) {
 Session session = currentUser.getSession();
//			System.out.println("Session默认超时时间为[" + session.getTimeout() + "]毫秒");
 if (null != session) {
 session.setAttribute(key, value);
 }
 }
 }


}
方法里principalCollection的值都是123...奇怪了


加载中
0
魏涛
魏涛

doGetAuthenticationInfo的用法有问题。仔细读一下源码你就会发现,该方法所要做的事是通过用户输入的token来获取系统内的用户信息,但是否通过验证并不在这里。所以该方法中的this.setSession("currentUser", user);是有问题的。

那么造成的影响就是,无论密码正确不正确,只要username被猜到了,你就能以该账号登录。至少session里的currentUser都会是它。


yongzhong
yongzhong
回复 @魏涛 : 好的,那我去看看
魏涛
魏涛
回复 @颜_ : 那个没什么问题,perms就是这样的,如果没有理解的话,可能你对shiro的工作原理还没有掌握清楚,多读一下它的源码你就可以明白了。并且解释起来话比较多,不愿意敲字。
yongzhong
yongzhong
感谢你的回答,麻烦帮忙看下这个问题http://www.oschina.net/question/1000732_135352
返回顶部
顶部