1. 程式人生 > >SpringBoot學習筆記(六):SpringBoot實現Shiro登入控制和許可權控制

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);
}