蘋果 iPhone 再現 Wi-Fi 漏洞,中招就只能恢復出廠設定
阿新 • • 發佈:2021-07-08
匯入依賴
- shiro整合spring
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.7.1</version> </dependency>
Config
- shiro配置類
@Bean public UserRealm userRealm(){ return new UserRealm(); } @Bean(name = "defaultWebSecurityManager") public DefaultWebSecurityManager defaultWebSecurityManager(@Qualifier("userRealm")UserRealm userRealm){ DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(userRealm); return securityManager; } @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(@Qualifier("defaultWebSecurityManager") DefaultWebSecurityManager defaultWebSecurityManager){ ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean(); bean.setSecurityManager(defaultWebSecurityManager); //新增內建過濾器 /** * anon 無需認證就可以訪問 * authc 認證才能訪問 * user 有 記住我 功能才能訪問 * perms 有資源許可權才能訪問 * role 有角色許可權才能訪問 */ Map<String, String> filterMap = new LinkedHashMap<>(); //設定訪問許可權 //認證許可權 //filterMap.put("/user/*","authc");支援萬用字元 filterMap.put("/user/add","authc"); filterMap.put("/user/delete","authc"); //只有 user:add 許可權才能訪問 add 頁面 filterMap.put("/user/add","perms[user:add]"); //設定登入請求 bean.setLoginUrl("/toLogin"); //未授權進入此提醒頁面 bean.setUnauthorizedUrl("/unauthorized"); bean.setFilterChainDefinitionMap(filterMap); return bean; }
- Realm類
public class UserRealm extends AuthorizingRealm { // 授權 @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { System.out.println("執行授權"); //設定當前使用者許可權 SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); info.addStringPermission("user:add"); /** * 得到當前使用者 * Subject subject = SecurityUtils.getSubject(); * 拿到 認證 方法中得到的 user 物件 * User user = (User)subject.getPrincipal(); * user 物件中有自己的 許可權 * info.addStringPermission(user.getPerms()) */ return info; } //認證 @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException { System.out.println("執行認證"); //使用者名稱、密碼,資料庫中取得 //查詢資料庫返回 user 物件 String name = "root"; String pwd = "123123"; UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken; if (!token.getUsername().equals(name)){ return null;//拋異常 UnknownAccountException } //AuthenticationInfo 是介面,返回該介面的實現類 //shiro做密碼認證 return new SimpleAuthenticationInfo("",pwd,""); // return new SimpleAuthenticationInfo(user,pwd,""); } }
Controller
- 獲取登入資訊,通過 UsernamePasswordToken(username, password) 傳遞引數。
- subject.login() 進行登入認證。
備註
- 新增許可權和角色