SpringBoot学习笔记(六):SpringBoot实现Shiro登录控制和权限控制

登录模块:在登录时必须调用
授权模块:不是一登录就调动,而是当角色权限控制时才会调用

登录控制

环境搭建在上一篇。

数据库表

表名:role 字段:id rolename
表名:user 字段:id username sex roleid
在代码中简历数据库表对应的实体类

code

userController.java

//添加如下方法
@RequestMaping("/loginAction")
public String loginAction(String name,String password){
Subject subject = SecurityUtiles.getSubject();
 MD5Hash md5Hash= new Md5Hash(password,"123").toString();
AuthenticationTocken tocken = new UsernamePasswordTocken(username,password);
		try{
		//如果执行subject.login(tocken);没有抛出异常,则证明登陆成功。
		//走到这里会进入下一个类
			subject.login(tocken);
				return "login Success"
		}catch(Exception e){
		//如果执行subject.login(tocken);抛出异常,则证明登陆失败。
			return "login Failed"
		}
		return "loginPage";
}

UserRealm.java

//控制登录
@Overrride
protected AuthenticationInfi doGEtAuthenticationInfo(AuthenticationTocken at)throws AuthenticationException{
		AuthenticationInfo info;
		String usersname = (String)at.getPrincipal;//从tocken里面得到username
		User user = userService.selectuserByUsername(username);
		if(user!=null){
		info = new SimpleAuthenticationInfo(username,user.getPassword(),"xxxxx");
		//执行到这里会自动和调用这个类的上面那个类里面的username和password
		进行比较
		return info;
		}
		return null;
}

权限控制

数据库

表名: permission (权限表)字段: id pername roleid
表名 :role(角色表)字段 :id rolename
表名:user 字段:id username sex roleid
在代码中简历数据库表对应的实体类

code

UserRealm.java

@Overrride
protected AuthenticationInfi doGEtAuthenticationInfo(AuthenticationTocken at)throws AuthenticationException{
		SimpleAuthenticationInfo info = new SimpleAuthenticationInfo();
		String usersname = (String)at.getPriMaryPrincipal;//从tocken里面得到username
		//将当前用户的角色和权限复制进来
		User user = userService.selectuserByUsername(username);
		Integer roleid = user.getRoleid();
		Role role = roleMapper.selectById(roleid);

		info.addRole(role.getRolename());
		
		Wrapper<Permission> wrapper = new EntityWrapper<>();
		wrapper.eq("roleid",role.getId(0);
		List<Permission> selectList = perMapper.seletList(wrapper);
		List<String> perlist = new ArrayList<>();
		selectList.forEach(per -> {
			perlist.add(per.getRolename());
		}
		)
		infoi.addStringPermissions(perlist);
			
		return info;
}

UserController.java

@RequiresRoles("admin")//当用户是这个的时候才能执行下面的方法
@RequestMapping("/getuser")
public Object getUser(Integer id){
	return userMapper.selectById(id);
}
@RequiresPermissions("sys:delete")//只有有这个权限的时候才能执行下面的方法
@RequestMapping("/deleteuser")
public Object deleteuser(Integer id){
	return userMapper.deleteById(id);
}

你可能感兴趣的:(#,JAVA,------,SpringBoot)