shiroWeb项目-认证及MD5认证信息在页面显示(十)

时间:2023-03-10 02:54:59
shiroWeb项目-认证及MD5认证信息在页面显示(十)

realm设置完整认证信息

// realm的认证方法,从数据库查询用户信息
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { // token是用户输入的用户名和密码
// 第一步从token中取出用户名
String userCode = (String) token.getPrincipal(); // 第二步:根据用户输入的userCode从数据库查询
SysUser sysUser = null;
try {
sysUser = sysService.findSysUserByUserCode(userCode);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} // 如果查询不到返回null
if (sysUser == null) {//
return null;
}
// 从数据库查询到密码
String password = sysUser.getPassword(); // 盐
String salt = sysUser.getSalt(); // 如果查询到返回认证信息AuthenticationInfo // activeUser就是用户身份信息
ActiveUser activeUser = new ActiveUser(); activeUser.setUserid(sysUser.getId());
activeUser.setUsercode(sysUser.getUsercode());
activeUser.setUsername(sysUser.getUsername());
// .. // 根据用户id取出菜单
List<SysPermission> menus = null;
try {
// 通过service取出菜单
menus = sysService.findMenuListByUserId(sysUser.getId());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 将用户菜单 设置到activeUser
activeUser.setMenus(menus); // 将activeUser设置simpleAuthenticationInfo
SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(activeUser, password,
ByteSource.Util.bytes(salt), this.getName()); return simpleAuthenticationInfo;
}

Action中显示认证信息

@RequestMapping("/first.action")
public String first(Model model)throws Exception{ //从shiro的session中取activeUser
Subject subject = SecurityUtils.getSubject();
//取身份信息
ActiveUser activeUser = (ActiveUser) subject.getPrincipal();
//通过model传到页面
model.addAttribute("activeUser", activeUser); return "/first";
}

页面中取出认证信息

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdYAAAAaCAIAAACFJep2AAAFoElEQVR4nO1cO5LsKgzVenoJXkevgT101HcJJLde1CuY3GlX3UVM4mBqkpdM/GK9AH/4SAK7Mfbc0Slqyg1GHGN8LARjwB+DL/v7Dvc73N/6g5m8m/vdvB9MQkb/5vpqSm870m3ZVk38d4PP28axNNgOAMAcPRRPjqf5vIBL/z6GKiZP1/NwNAGFQqH4uVAJVigUisOgEqxQKBSHQSVYoVAoDoNK8DnQG+hsnfUGhULxfaASfAoMtuPWaMcV3AYK3ZsmzSheR2/4MfFh8QJ4Abx0+FFm7mnwYqoSFHF+hi1xOgkGiClFOekJJUbK7a/F6uoAmjSdPe2HHi+AT0REfHR4tUWVVIJ3az4EMoo2F82lUa2oIndcWMpBuIqCa13O1qTp7Gk3+GJaLqwqwS3g6yypeqR0yplRqQzBICY6u0Gp55rTEO/NOJdk4xCD7WqGBnrTYk/6YLuomcqXoXAguvXDLrP7R7dJ4HaW4AoM/y4c7wX7x4LmpieT5wiZ2yiVkFnX9DLEXZjX9PxiHKtdYzAQANKI4BQ99gqDrLSeZy2RzjBnfmukNObzchIckglfCaRBnJcrl+KSN0n0xol+1qXhSriOpO/XYDsw1tFYKkeMhQumRseAV8CrxUe3zPcdngavFp9misN6pU7gXIjWjU+/4hK6TWpxBv2KcajhZYZpW5UZtsXxXjB4zm+a7xdBzuHl4Nfi8rlzyPOxTILTWi7X8zLmh4yWYNptHWy3ZPYmeD6jnyXmpOJQcgNxDZXW+yVLMM+BNYjx+lPaQsn1BD9r0wj1M+k28ga5l0Bnh/nAoyXR8G0lA2fUo2Sla1SiyZe8edITFAEgwOJy9oRykQZTl5YTuFcZRm3twLAlTiTBUU7hOZwUktbSY7l1gVUlCUZE39mJHdO1vl5mxr9egoOnPLCeNDXXzkswSYI3iInYlEU2chJck4bscdOs5upLjwWdyNKI+S4lzrW8GbwA3vrR5XRfV4jm8mxM1knwLGr9ZCpBHBzgpdBHBYZRW7UZNsbxEowF6pbK5WYJjrzaVyS4xFkmCRESbPrxYQoeO87bS+IKvkSs1Nhc8aIFoSr4k+SQRzYW7NFnghprL6zoemIbVWmIbTH3S5JgkYZv16PufLonIk5K9/By1krw8lmcAa/TRN53GEmBkz+mU4dh2lY9hu3xzSQYEuUFXmFnkJaBl+CsHZKknO+fEUnwYDsvYptdx4qVWvDSYmxT6DF7i5+XOTe4FJHcHhJclQbfFn+/chKcu+B4dPgrXYh4g2AavtELDhocw7ikwRIfsw5Doa2XGbbH8RIMlFdL6h0poFnJE+RVsCwfpz+5ponTEgmeFuOIuTErwVF0MowZsiKciaFyj31vAIyJlwwFY0IEOSUUhDaKVZ0oTy6cj9XWp5GRYPJ+SRJcEu9OgxXBlHwMuW6SYC486u/kjQzekqBqRKAaQ6qtagyb4ztJsJwj2+eOt0lwYesZCU6mp6l00jFPv2Jn+2hHW2iWUqW4iJj0pm8Cjh5TK7DJ7kOQ6AUVyySYjGTPpvytf9VpSB43d79ECZa7F4P6Pg9vb0CHH/2y8CUInL+jIHIRos0G8TTfKyKisVN84FmVYdRWfYZtcaJNabhG8sgcDqvsrz1ejdgLlj4PoRtqFTz2GR3pWgWDkr266c6zljg/Qzxcgn1wOjv/zSps1ux87FeMjkkL2XNWgJBgOTagGqygULg1by0qSnB/8Jav8zPEU0nwT0HxEHdo95kexbeB9JmeV1FJgsfNZ9XfEGtwfoaoEnwAVkqwQtEUOj7bQvu6OXSIK84MHZ9toX3dHDrEFWeGjs+20L5uDh3iijNDx2dbaF83Bxz9KVhNmrJJ0Qp/YV+/m/vdvO9lGcb0236tqOl2gLt/zTz86dKkKZtq4sv+86v7s+Z5+Un4H5SAYV2bchqaAAAAAElFTkSuQmCC" alt="" />

--------------------------------------------------------MD5认证-------------------------------------

数据库中存储到的md5的散列值,在realm中需要设置数据库中的散列值它使用散列算法 及散列次数,让shiro进行散列对比时和原始数据库中的散列值使用的算法 一致。

aaarticlea/png;base64,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" alt="" />

aaarticlea/png;base64,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" alt="" />