SpringBoot學習筆記(六):SpringBoot實現Shiro登入控制和許可權控制
阿新 • • 發佈:2019-01-02
登入模組:在登入時必須呼叫
授權模組:不是一登入就調動,而是當角色許可權控制時才會呼叫
登入控制
環境搭建在上一篇。
資料庫表
表名: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);
}