博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JFinal 整合 Shiro 补充密码简单加密方法及其他
阅读量:5740 次
发布时间:2019-06-18

本文共 2576 字,大约阅读时间需要 8 分钟。

  hot3.png

上一篇文章: JFinal 整合 Shiro 补充Realm类和数据库

增加密码加密及修改shiro.principal输出值为用户名

public void checklogin() {		String pwd = new Sha256Hash(getPara("pwd"), getPara("name"), 1024).toBase64(); // 将用户输入密码与用户名salt加密		UsernamePasswordToken token = new UsernamePasswordToken(getPara("name"), pwd);		try {			SecurityUtils.getSubject().login(token);		} catch (AuthenticationException e) {			System.out.println("用户密码错误或用户名不存在!");		}		redirect("/manage/index");	}

主要利用用户名将密码进行盐值加密,在用户注册时同样需要用此方法先处理用户密码后保存。

String pwd = new Sha256Hash(getPara("pwd"), getPara("name"), 1024).toBase64(); // 将用户输入密码与用户名salt加密

 

修改Realm

import org.apache.shiro.authc.AuthenticationException;import org.apache.shiro.authc.AuthenticationInfo;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authc.SimpleAuthenticationInfo;import org.apache.shiro.authc.UsernamePasswordToken;import org.apache.shiro.authz.AuthorizationInfo;import org.apache.shiro.authz.SimpleAuthorizationInfo;import org.apache.shiro.realm.AuthorizingRealm;import org.apache.shiro.subject.PrincipalCollection;import cn.ac.las.common.model.Adminrole;import cn.ac.las.common.model.Adminuser;public class ShiroDbRealm extends AuthorizingRealm {	/**	 * 认证回调函数, 登录时调用.	 */	@Override	protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {		UsernamePasswordToken token = (UsernamePasswordToken) authcToken;		String password = String.valueOf(token.getPassword());		// 调用操作数据库的方法查询user信息		Adminuser user = Adminuser.dao.findFirst(				"select * from adminuser where username = ?", token.getUsername());		if (user != null) {			if (password.equals(user.getStr("password"))) {				return new SimpleAuthenticationInfo(user.getStr("username"), user.getStr("password"), getName());			} else {				return null;			}		} else {			return null;		}	}	/**	 * 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用.	 */	@Override	protected AuthorizationInfo doGetAuthorizationInfo(			PrincipalCollection principals) {		Adminuser user = Adminuser.dao.findFirst("select * from adminuser where username = ?", (String) principals.fromRealm(getName()).iterator().next());		if (user != null) {			SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();			Adminrole role = Adminrole.dao.findById(user.getInt("roleid"));			info.addRole(role.getStr("rolename"));			// info.addStringPermissions( role.getPermissions()			// );//如果你添加了对权限的表,打开此注释,添加角色具有的权限			return info;		} else {			return null;		}	}}

页面是使用 <@shiro.principal/>将会输出username的值。

初学shiro,利用其自身内置加密的方式总是调试不成功,只有将密码加密部分单独实现。

转载于:https://my.oschina.net/stu51/blog/169318

你可能感兴趣的文章
SQL中使用WITH AS提高性能 使用公用表表达式(CTE)简化嵌套SQL
查看>>
oracle 强行杀掉一个用户连接
查看>>
Git提交本地库代码到远程服务器的操作
查看>>
让你快速上手的Glide4.x教程
查看>>
浮动和清除(闭合)浮动
查看>>
LR录制脚本时IE打不开的原因
查看>>
微博自动化测试
查看>>
Sublime Text 2.0.2,Build 2221注册码
查看>>
js scroll事件
查看>>
最长递增子序列 动态规划
查看>>
原生CSS设置网站主题色—CSS变量赋值
查看>>
webpack 4.0 中 clean-webpack-plugin 的使用
查看>>
WPF
查看>>
中文词频统计
查看>>
POJ 2236 Wireless Network (并查集)
查看>>
python分类
查看>>
GitBlit (1)-- 在linux 安装 GitBlit 并运行
查看>>
Windows与Linux之间的文件自动同步
查看>>
程序是如何执行的(一)a=a+1
查看>>
go : 结构
查看>>