SpringBoot-shiro登入攔截.使用者認證.整合Mybatis
1.SpringBoot-shiro登入攔截
package com.wjm.config;
import java.util.LinkedHashMap;
import java.util.Map;
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;
@Configuration
public class ShiroConfig {
//ShiroFilterFactoryBean 3. 認證
public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager")DefaultWebSecurityManager defaultWebSecurityManager) {
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
//關聯DefaultWebSecurityManager
//設定安全管理器
bean.setSecurityManager(defaultWebSecurityManager);
bean.setLoginUrl("/login");//提供登入到url
bean.setSuccessUrl("/index");//提供登陸成功的url
//新增shiro內建過濾器
/**
* anno 無需認證就可以訪問
* authc 認證了才能訪問
* user 必須有記住我功能才能用
* perms 擁有對某個資源的許可權才能訪問
*/
Map<String,String> filterChainDefinitionMap = new LinkedHashMap<>();
// filterChainDefinitionMap.put("/user/add", "user");
// filterChainDefinitionMap.put("/user/update", "user");
filterChainDefinitionMap.put("/user/*", "authc");
bean.setFilterChainDefinitionMap(filterChainDefinitionMap);
//設定登入的請求
bean.setLoginUrl("/toLogin");
return bean;
}
/**
* @Qualifier(“實現類名稱”)表明注入的是哪一個實現類的bean
*/
//DafaultWebSecurityManager 2.
@Bean(name = "securityManager")
public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm realm) {
DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();
//關聯userRealm
defaultWebSecurityManager.setRealm(realm);
return defaultWebSecurityManager;
}
//建立 Realm 物件自定義 1.
@Bean
public UserRealm userRealm() {
return new UserRealm();
}
}
2.使用者認證
本來程式碼應該寫入 Realm 自定義類中
但是為了看起來比較舒服
@RequestMapping("/login")
public String login(String username,String password,Model model) {
// 獲取當前使用者
Subject subject = SecurityUtils.getSubject();
// 封裝使用者資料
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
//執行登入方法
try {
subject.login(token);
return "index";
} catch (UnknownAccountException e) {//使用者名稱不存在
model.addAttribute("msg","使用者名稱不存在");
return "login";
} catch (IncorrectCredentialsException e) {//使用者名稱不存在
model.addAttribute("msg","賬號或者密碼錯誤");
return "login";
}
}
直接在UserRealm 進行認證
package com.wjm.config;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
/**
* 自定義的 UserRealm
* 授權領域
*/
public class UserRealm extends AuthorizingRealm{
//獲取授權資訊
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection token) {
System.out.println("執行了=》授權doGetAuthorizationInfo");
return null;
}
//認證
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
System.out.println("執行了=》認證doGetAuthorizationInfo");
//資料庫中 獲取使用者名稱 密碼
String name = "root";
String password = "123456";
//這裡直接 拿到UsernamePasswordToken
UsernamePasswordToken user = (UsernamePasswordToken)token;
if (!user.getUsername().equals(name)) {
return null; //丟擲異常UnknownAccountException
}
//密碼認證,shiro做,不需要我來操作
return new SimpleAuthenticationInfo("",password,"");
}
}
整合Mybatis
1.pom座標
<!-- shiro整合spring -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
2.mybatis的基本步驟
完成
相關文章
- SpringBoot 整合 Shiro 實現登入攔截Spring Boot
- SpringMVC(六) 攔截器和使用者登入校驗SpringMVC
- Mybatis 攔截器MyBatis
- MyBatis攔截器MyBatis
- 前端架構之vue+axios 前端實現登入攔截(路由攔截、http攔截)前端架構VueiOS路由HTTP
- vue通過vue-router攔截實現登入驗證Vue
- SSM專案使用攔截器實現登入驗證功能SSM
- Go語言WEB框架:使用wego攔截器驗證使用者的登入狀態GoWeb框架
- Mybatis Interceptor 攔截器MyBatis
- SpringBoot--- Shiro(攔截,認證)、Thymeleaf(模板引擎)Spring Boot
- springboot2.0+jsp+登入攔截器Spring BootJS
- mybatis註冊攔截器MyBatis
- SpringBoot 整合 Shiro 密碼登入與郵件驗證碼登入(多 Realm 認證)Spring Boot密碼
- SpringBoot 2.X配置登入攔截器Spring Boot
- Spring Boot 整合 Sa-Token 實現登入認證Spring Boot
- laravel5.6 RESTful API系列之整合github登入認證!LaravelRESTAPIGithub
- 整合spring cloud雲架構 - SSO單點登入之OAuth2.0登入認證SpringCloud架構OAuth
- 前後端實現登入token攔截校驗後端
- [譯]React中的使用者認證(登入態管理)React
- 【Serverless】Unity快速整合認證服務實現郵件登入ServerUnity
- [Laravel 8 使用者認證] Jetstream 之 如何自定義登入驗證Laravel
- vue.js新增攔截器,實現token認證(使用axios)Vue.jsiOS
- 整合spring cloud雲架構 - SSO單點登入之OAuth2.0登入認證(1)SpringCloud架構OAuth
- Vue + Spring Boot 專案實戰(十四):使用者認證方案與完善的訪問攔截VueSpring Boot
- passport API 認證 -- 多表登入PassportAPI
- 登入模組 使用者認證 SpringSecurity +Oauth2+JwtSpringGseOAuthJWT
- Delphi LDAP物件管理(使用者登入認證、組、組織)LDA物件
- Springboot中登入後關於cookie和session攔截案例Spring BootCookieSession
- “犯罪心理”解讀 Mybatis 攔截器MyBatis
- Mybatis 分頁:Pagehelper + 攔截器實現MyBatis
- "犯罪心理"解讀Mybatis攔截器MyBatis
- 不被攔截的綠標域名我們如何申請認證呢?
- Flask Session 登入認證模組FlaskSession
- JWT登入認證-專案BotBattleJWTBAT
- Redis使用認證密碼登入Redis密碼
- Laravel 5.5 不同使用者表登入認證 (前後臺分離)Laravel
- SpringCache框架載入/攔截原理SpringGC框架
- 實戰模擬│JWT 登入認證JWT