springboot-shiro:登入攔截
阿新 • • 發佈:2022-03-09
1 編寫一個登入頁面
src/main/resources/templates/index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>登入</h1> <hr> <form action=""> <p>使用者名稱:<input type="text" name="username"></p> <p>密碼:<input type="text" name="password"></p> <p><input type="submit"></p> </form> </body> </html>
2 在MyController中新增跳轉到登入頁的方法
src/main/java/com/lv/controller/MyController.java
@RequestMapping("/toLogin")
public String toLogin(){
return "login";
}
3 在ShiroConfig中新增shiro的內建過濾器,和配置跳轉的頁面
src/main/java/com/lv/config/ShiroConfig.java
package com.lv.config; import org.apache.shiro.spring.web.ShiroFilterFactoryBean; import org.apache.shiro.web.mgt.DefaultWebSecurityManager; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.LinkedHashMap; import java.util.Map; //宣告為配置類 @Configuration public class ShiroConfig { //ShiroFilterFactoryBean : 第三步 @Bean public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager defaultWebSecurityManager){ ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean(); //設定安全管理器 bean.setSecurityManager(defaultWebSecurityManager); //配置攔截的過濾器 Map<String,String> filterMap = new LinkedHashMap<>(); //filterMap.put("/user/add","authc"); //filterMap.put("/user/update","authc"); filterMap.put("/user/*","authc"); bean.setFilterChainDefinitionMap(filterMap); //設定登入的請求 bean.setLoginUrl("/toLogin"); return bean; } //DefaultWebSecurityManager : 第二步 @Bean(name = "securityManager") public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); //關聯userRealm securityManager.setRealm(userRealm); return securityManager; } //建立realm物件,需要自定義類 : 第一步 @Bean public UserRealm userRealm(){ return new UserRealm(); } }
4 啟動程式測試
訪問主頁,點選 add 和 update
都會跳到登入頁
登入攔截成功實現
5 shiro內建過濾器,常用的有如下過濾器:
- anon: 無需認證就可以訪問
- authc: 必須認證才可以訪問
- user: 如果使用了記住我功能就可以直接訪問
- perms: 擁有某個資源許可權才可以訪問
- role: 擁有某個角色許可權才可以訪問