说明:在查询用户信息时第一次查询数据来源于数据库,再次查询如果再从数据库中取数据那么性能就比较差,可以将第一次查到的数据放入缓存这样就很方便。
第一步:先自定义一个注解
/**
* 注解?
* 1)JDK1.5推出的一种元数据
* 2)是java中的一种元数据(描述数据的数据)
* 自定义注解:
* @author Administrator
* @Target 表示注解何时可以修饰哪些成员
* @Retention 表示注解何时有效(一般我们自定义的注解设置为运行时生效)
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RequiredCache {
}
第二步:将该注解添加到具体业务方法上。我此次添加到查询用户信息的方法。
@RequiredCache
@Override
public PageObject<SysUserDeptResult> doFindPageObjects(String username,Integer pageCurrent) {
System.out.println("From to database");
//1.数据合法性验证
if(pageCurrent==null||pageCurrent<=0)
throw new ServiceException("参数不合法");
//2.依据条件获取总记录数
int rowCount=sysUserDao.getRowCount(username);
if(rowCount==0)
throw new ServiceException("记录不存在");
//3.计算startIndex的值
int pageSize=3;
int startIndex=(pageCurrent-1)*pageSize;
//4.依据条件获取当前页数据
List<SysUserDeptResult> records=
sysUserDao.findPageObjects(
username, startIndex, pageSize);
//5.封装数据
PageObject<SysUserDeptResult> pageObject=
PageUtils.newPageObject(rowCount,records, pageSize, pageCurrent);
return pageObject;
}
@Override
public int updateUserPwd(String password, String newPwd, String cfgPwd) {
//1.对参数进行非空验证
if(password==null || password.length()==0) {
throw new IllegalArgumentException("请输入旧密码!");
}
if(newPwd==null || newPwd.length()==0) {
throw new IllegalArgumentException("请输入新密码!");
}
if(cfgPwd==null || cfgPwd.length()==0) {
throw new IllegalArgumentException("请确认新密码!");
}
//2.验证参数的合法性、
//2.1判断两次输入的新密码是否一致
if(!newPwd.equals(cfgPwd)) {
throw new IllegalArgumentException("两次输入密码不一致!");
}
//2.2判断旧密码是否跟登录密码一致
//2.2.1 先获取用户的登陆身份通过shiro认证管理工具获得
SysUser user = (SysUser) SecurityUtils.getSubject().getPrincipal();
SimpleHash sh = new SimpleHash("MD5", password, user.getSalt());
//sh.toHex()是将加密后的密码转换为16进制
if(!user.getPassword().equals(sh.toHex())) {
throw new IllegalArgumentException("输入的旧密码不正确!");
}
//2.3判断新旧密码是否一致
if(password.equals(newPwd)) {
throw new IllegalArgumentException("新密码不能与旧密码相同!");
}
//3.更新密码
String salt = UUID.randomUUID().toString();
sh = new SimpleHash("MD5", newPwd, salt);
int rows = sysUserDao.updateUserPwd(user.getUsername(), sh.toHex(), salt);
return rows;
}