Showing preview only (1,448K chars total). Download the full file or copy to clipboard to get everything.
Repository: wuyouzhuguli/SpringAll
Branch: master
Commit: 614d2578d949
Files: 1050
Total size: 1.1 MB
Directory structure:
gitextract_zh464p81/
├── .gitignore
├── 01.Start-Spring-Boot/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── springboot/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── springboot/
│ └── demo/
│ └── DemoApplicationTests.java
├── 02.Spring-Boot-Config/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── springboot/
│ │ │ ├── Application.java
│ │ │ ├── bean/
│ │ │ │ ├── BlogProperties.java
│ │ │ │ ├── ConfigBean.java
│ │ │ │ └── TestConfigBean.java
│ │ │ └── controller/
│ │ │ └── IndexController.java
│ │ └── resources/
│ │ ├── application-dev.properties
│ │ ├── application-prod.properties
│ │ ├── application.properties
│ │ ├── banner.txt
│ │ └── test.properties
│ └── test/
│ └── java/
│ └── com/
│ └── springboot/
│ └── demo/
│ └── DemoApplicationTests.java
├── 03.Spring-Boot-MyBatis/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── bean/
│ │ │ └── Student.java
│ │ ├── controller/
│ │ │ └── TestController.java
│ │ ├── mapper/
│ │ │ └── StudentMapper.java
│ │ └── service/
│ │ ├── StudentService.java
│ │ └── impl/
│ │ └── StudentServiceImp.java
│ └── resources/
│ ├── application.yml
│ └── init.sql
├── 04.Spring-Boot-JdbcTemplate/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── bean/
│ │ │ └── Student.java
│ │ ├── controller/
│ │ │ └── TestController.java
│ │ ├── dao/
│ │ │ ├── StudentDao.java
│ │ │ └── impl/
│ │ │ └── StudentDaoImp.java
│ │ ├── mapper/
│ │ │ └── StudentMapper.java
│ │ └── service/
│ │ ├── StudentService.java
│ │ └── impl/
│ │ └── StudentServiceImp.java
│ └── resources/
│ ├── application.yml
│ └── init.sql
├── 05.Spring-Boot-MyBatis-MultiDataSource/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── controller/
│ │ │ └── StudentController.java
│ │ ├── datasource/
│ │ │ ├── MysqlDatasourceConfig.java
│ │ │ └── OracleDatasourceConfig.java
│ │ ├── mysqldao/
│ │ │ └── MysqlStudentMapper.java
│ │ ├── oracledao/
│ │ │ └── OracleStudentMapper.java
│ │ └── service/
│ │ ├── StudentService.java
│ │ └── impl/
│ │ └── StudentServiceImp.java
│ └── resources/
│ ├── application.yml
│ ├── mapper/
│ │ ├── mysql/
│ │ │ └── MysqlStudentMapper.xml
│ │ └── oracle/
│ │ └── OracleStudentMapper.xml
│ ├── mysql_sql.sql
│ └── oracle_sql.sql
├── 06.Spring-Boot-JdbcTemplate-MultiDataSource/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── controller/
│ │ │ └── StudentController.java
│ │ ├── dao/
│ │ │ ├── MysqlStudentDao.java
│ │ │ ├── OracleStudentDao.java
│ │ │ └── impl/
│ │ │ ├── MysqlStudentDaoImp.java
│ │ │ └── OracleStudentDaoImp.java
│ │ ├── datasource/
│ │ │ └── DataSourceConfig.java
│ │ └── service/
│ │ ├── StudentService.java
│ │ └── impl/
│ │ └── StudentServiceImp.java
│ └── resources/
│ ├── application.yml
│ ├── mysql_sql.sql
│ └── oracle_sql.sql
├── 07.Spring-Boot-AOP-Log/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── annotation/
│ │ │ └── Log.java
│ │ ├── aspect/
│ │ │ └── LogAspect.java
│ │ ├── controller/
│ │ │ └── TestController.java
│ │ ├── dao/
│ │ │ ├── SysLogDao.java
│ │ │ └── impl/
│ │ │ └── SysLogDaoImp.java
│ │ ├── domain/
│ │ │ └── SysLog.java
│ │ └── util/
│ │ ├── HttpContextUtils.java
│ │ └── IPUtils.java
│ └── resources/
│ ├── application.yml
│ └── init.sql
├── 08.Spring-Boot-Thymeleaf/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── bean/
│ │ │ └── Account.java
│ │ └── controller/
│ │ └── IndexController.java
│ └── resources/
│ ├── application.properties
│ ├── static/
│ │ └── css/
│ │ └── style.css
│ └── templates/
│ └── account.html
├── 09.Spring-Boot-Redis-Cache/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── ApplicationTest.java
│ │ ├── bean/
│ │ │ └── Student.java
│ │ ├── config/
│ │ │ └── RedisConfig.java
│ │ ├── mapper/
│ │ │ └── StudentMapper.java
│ │ └── service/
│ │ ├── StudentService.java
│ │ └── impl/
│ │ └── StudentServiceImpl.java
│ └── resources/
│ ├── application.yml
│ └── init.sql
├── 10.Spring-Boot-Ehcache-Cache/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── ApplicationTest.java
│ │ ├── bean/
│ │ │ └── Student.java
│ │ ├── mapper/
│ │ │ └── StudentMapper.java
│ │ └── service/
│ │ ├── StudentService.java
│ │ └── impl/
│ │ └── StudentServiceImpl.java
│ └── resources/
│ ├── application.yml
│ ├── ehcache.xml
│ └── init.sql
├── 11.Spring-Boot-Shiro-Authentication/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── config/
│ │ │ └── ShiroConfig.java
│ │ ├── controller/
│ │ │ └── LoginController.java
│ │ ├── dao/
│ │ │ └── UserMapper.java
│ │ ├── pojo/
│ │ │ ├── ResponseBo.java
│ │ │ └── User.java
│ │ ├── shiro/
│ │ │ └── ShiroRealm.java
│ │ └── util/
│ │ └── MD5Utils.java
│ └── resources/
│ ├── application.yml
│ ├── init.sql
│ ├── mapper/
│ │ └── UserMapper.xml
│ ├── static/
│ │ └── css/
│ │ └── login.css
│ └── templates/
│ ├── index.html
│ └── login.html
├── 12.Spring-Boot-Shiro-RememberMe/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── config/
│ │ │ └── ShiroConfig.java
│ │ ├── controller/
│ │ │ └── LoginController.java
│ │ ├── dao/
│ │ │ └── UserMapper.java
│ │ ├── pojo/
│ │ │ ├── ResponseBo.java
│ │ │ └── User.java
│ │ ├── shiro/
│ │ │ └── ShiroRealm.java
│ │ └── util/
│ │ └── MD5Utils.java
│ └── resources/
│ ├── application.yml
│ ├── init.sql
│ ├── mapper/
│ │ └── UserMapper.xml
│ ├── static/
│ │ └── css/
│ │ └── login.css
│ └── templates/
│ ├── index.html
│ └── login.html
├── 13.Spring-Boot-Shiro-Authorization/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── config/
│ │ │ └── ShiroConfig.java
│ │ ├── controller/
│ │ │ ├── LoginController.java
│ │ │ └── UserController.java
│ │ ├── dao/
│ │ │ ├── UserMapper.java
│ │ │ ├── UserPermissionMapper.java
│ │ │ └── UserRoleMapper.java
│ │ ├── handler/
│ │ │ └── GlobalExceptionHandler.java
│ │ ├── pojo/
│ │ │ ├── Permission.java
│ │ │ ├── ResponseBo.java
│ │ │ ├── Role.java
│ │ │ └── User.java
│ │ ├── shiro/
│ │ │ └── ShiroRealm.java
│ │ └── util/
│ │ └── MD5Utils.java
│ └── resources/
│ ├── application.yml
│ ├── init.sql
│ ├── mapper/
│ │ ├── UserMapper.xml
│ │ ├── UserPermissionMapper.xml
│ │ └── UserRoleMapper.xml
│ ├── static/
│ │ └── css/
│ │ └── login.css
│ └── templates/
│ ├── 403.html
│ ├── index.html
│ ├── login.html
│ └── user.html
├── 14.Spring-Boot-Shiro-Redis/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── config/
│ │ │ └── ShiroConfig.java
│ │ ├── controller/
│ │ │ ├── LoginController.java
│ │ │ └── UserController.java
│ │ ├── dao/
│ │ │ ├── UserMapper.java
│ │ │ ├── UserPermissionMapper.java
│ │ │ └── UserRoleMapper.java
│ │ ├── handler/
│ │ │ └── GlobalExceptionHandler.java
│ │ ├── pojo/
│ │ │ ├── Permission.java
│ │ │ ├── ResponseBo.java
│ │ │ ├── Role.java
│ │ │ └── User.java
│ │ ├── shiro/
│ │ │ └── ShiroRealm.java
│ │ └── util/
│ │ └── MD5Utils.java
│ └── resources/
│ ├── application.yml
│ ├── init.sql
│ ├── mapper/
│ │ ├── UserMapper.xml
│ │ ├── UserPermissionMapper.xml
│ │ └── UserRoleMapper.xml
│ ├── static/
│ │ └── css/
│ │ └── login.css
│ └── templates/
│ ├── 403.html
│ ├── index.html
│ ├── login.html
│ └── user.html
├── 15.Spring-Boot-Shiro-Ehcache/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── config/
│ │ │ └── ShiroConfig.java
│ │ ├── controller/
│ │ │ ├── LoginController.java
│ │ │ └── UserController.java
│ │ ├── dao/
│ │ │ ├── UserMapper.java
│ │ │ ├── UserPermissionMapper.java
│ │ │ └── UserRoleMapper.java
│ │ ├── handler/
│ │ │ └── GlobalExceptionHandler.java
│ │ ├── pojo/
│ │ │ ├── Permission.java
│ │ │ ├── ResponseBo.java
│ │ │ ├── Role.java
│ │ │ └── User.java
│ │ ├── shiro/
│ │ │ └── ShiroRealm.java
│ │ └── util/
│ │ └── MD5Utils.java
│ └── resources/
│ ├── application.yml
│ ├── config/
│ │ └── shiro-ehcache.xml
│ ├── init.sql
│ ├── mapper/
│ │ ├── UserMapper.xml
│ │ ├── UserPermissionMapper.xml
│ │ └── UserRoleMapper.xml
│ ├── static/
│ │ └── css/
│ │ └── login.css
│ └── templates/
│ ├── 403.html
│ ├── index.html
│ ├── login.html
│ └── user.html
├── 16.Spring-Boot-Shiro-Thymeleaf-Tag/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── config/
│ │ │ └── ShiroConfig.java
│ │ ├── controller/
│ │ │ ├── LoginController.java
│ │ │ └── UserController.java
│ │ ├── dao/
│ │ │ ├── UserMapper.java
│ │ │ ├── UserPermissionMapper.java
│ │ │ └── UserRoleMapper.java
│ │ ├── handler/
│ │ │ └── GlobalExceptionHandler.java
│ │ ├── pojo/
│ │ │ ├── Permission.java
│ │ │ ├── ResponseBo.java
│ │ │ ├── Role.java
│ │ │ └── User.java
│ │ ├── shiro/
│ │ │ └── ShiroRealm.java
│ │ └── util/
│ │ └── MD5Utils.java
│ └── resources/
│ ├── application.yml
│ ├── config/
│ │ └── shiro-ehcache.xml
│ ├── init.sql
│ ├── mapper/
│ │ ├── UserMapper.xml
│ │ ├── UserPermissionMapper.xml
│ │ └── UserRoleMapper.xml
│ ├── static/
│ │ └── css/
│ │ └── login.css
│ └── templates/
│ ├── 403.html
│ ├── index.html
│ ├── login.html
│ └── user.html
├── 17.Spring-Boot-Shiro-Session/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── config/
│ │ │ └── ShiroConfig.java
│ │ ├── controller/
│ │ │ ├── LoginController.java
│ │ │ ├── SessionController.java
│ │ │ └── UserController.java
│ │ ├── dao/
│ │ │ ├── UserMapper.java
│ │ │ ├── UserPermissionMapper.java
│ │ │ └── UserRoleMapper.java
│ │ ├── handler/
│ │ │ └── GlobalExceptionHandler.java
│ │ ├── listener/
│ │ │ └── ShiroSessionListener.java
│ │ ├── pojo/
│ │ │ ├── Permission.java
│ │ │ ├── ResponseBo.java
│ │ │ ├── Role.java
│ │ │ ├── User.java
│ │ │ └── UserOnline.java
│ │ ├── service/
│ │ │ ├── SessionService.java
│ │ │ └── impl/
│ │ │ └── SessionServiceImpl.java
│ │ ├── shiro/
│ │ │ └── ShiroRealm.java
│ │ └── util/
│ │ └── MD5Utils.java
│ └── resources/
│ ├── application.yml
│ ├── config/
│ │ └── shiro-ehcache.xml
│ ├── init.sql
│ ├── mapper/
│ │ ├── UserMapper.xml
│ │ ├── UserPermissionMapper.xml
│ │ └── UserRoleMapper.xml
│ ├── static/
│ │ ├── css/
│ │ │ └── login.css
│ │ └── js/
│ │ └── dateFormat.js
│ └── templates/
│ ├── 403.html
│ ├── index.html
│ ├── login.html
│ ├── online.html
│ └── user.html
├── 18.Spring-Boot-Jackson/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ ├── DemoApplication.java
│ │ │ ├── config/
│ │ │ │ ├── JacksonConfig.java
│ │ │ │ ├── UserDeserializer.java
│ │ │ │ └── UserSerializer.java
│ │ │ ├── controller/
│ │ │ │ └── TestJsonController.java
│ │ │ └── pojo/
│ │ │ └── User.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── example/
│ └── demo/
│ └── DemoApplicationTests.java
├── 19.Spring-Boot-Testing/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── demo/
│ │ │ └── springboot/
│ │ │ └── test/
│ │ │ ├── TestApplication.java
│ │ │ ├── config/
│ │ │ │ └── MyMapper.java
│ │ │ ├── controller/
│ │ │ │ └── UserController.java
│ │ │ ├── domain/
│ │ │ │ └── User.java
│ │ │ ├── mapper/
│ │ │ │ ├── SeqenceMapper.java
│ │ │ │ └── UserMapper.java
│ │ │ └── service/
│ │ │ ├── IService.java
│ │ │ ├── UserService.java
│ │ │ └── impl/
│ │ │ ├── BaseService.java
│ │ │ └── UserServiceImpl.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── config/
│ │ │ └── mybatis-config.xml
│ │ └── init.sql
│ └── test/
│ └── java/
│ └── demo/
│ └── springboot/
│ └── test/
│ └── UserControllerTest.java
├── 20.Spring-Boot-Swagger2/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── config/
│ │ │ │ ├── SwaggerConfig.java
│ │ │ │ └── WebConfig.java
│ │ │ ├── controller/
│ │ │ │ └── UserController.java
│ │ │ └── domain/
│ │ │ └── User.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── example/
│ └── demo/
│ └── DemoApplicationTests.java
├── 21.Spring-Boot-Actuator/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── springboot/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── springboot/
│ └── demo/
│ └── DemoApplicationTests.java
├── 22.Spring-Boot-Email/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── springboot/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ └── controller/
│ │ │ └── EmailController.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── static/
│ │ │ └── file/
│ │ │ └── 项目文档.docx
│ │ └── templates/
│ │ └── emailTemplate.html
│ └── test/
│ └── java/
│ └── com/
│ └── springboot/
│ └── demo/
│ └── DemoApplicationTests.java
├── 23.Spring-Boot-Admin/
│ ├── Spring Boot Admin Client/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── demo/
│ │ │ │ └── DemoApplication.java
│ │ │ └── resources/
│ │ │ └── application.yml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ └── DemoApplicationTests.java
│ └── Spring Boot Admin Server/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── example/
│ └── demo/
│ └── DemoApplicationTests.java
├── 24.Spring-Boot-Devtools/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── springboot/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ └── application.yml
│ └── test/
│ └── java/
│ └── com/
│ └── springboot/
│ └── demo/
│ └── DemoApplicationTests.java
├── 25.Spring-Boot-Exception/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── cc/
│ │ │ └── mrbird/
│ │ │ ├── Application.java
│ │ │ ├── controller/
│ │ │ │ └── UserController.java
│ │ │ ├── exception/
│ │ │ │ └── UserNotExistException.java
│ │ │ └── handler/
│ │ │ └── ControllerExceptionHandler.java
│ │ └── resources/
│ │ ├── application.properties
│ │ └── resources/
│ │ └── error/
│ │ └── 500.html
│ └── test/
│ └── java/
│ └── cc/
│ └── mrbird/
│ └── cc/
│ └── mrbird/
│ └── demo/
│ └── ApplicationTests.java
├── 26.Spring-Boot-Filter-Interceptor/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── cc/
│ │ │ └── mrbird/
│ │ │ ├── Application.java
│ │ │ ├── config/
│ │ │ │ └── WebConfig.java
│ │ │ ├── controller/
│ │ │ │ └── UserController.java
│ │ │ ├── filter/
│ │ │ │ └── TimeFilter.java
│ │ │ └── interceptor/
│ │ │ └── TimeInterceptor.java
│ │ └── resources/
│ │ ├── application.properties
│ │ └── resources/
│ │ └── error/
│ │ └── 500.html
│ └── test/
│ └── java/
│ └── cc/
│ └── mrbird/
│ └── cc/
│ └── mrbird/
│ └── demo/
│ └── ApplicationTests.java
├── 27.Spring-Boot-Mapper-PageHelper/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── springboot/
│ │ ├── Application.java
│ │ ├── ApplicationTest.java
│ │ ├── bean/
│ │ │ └── User.java
│ │ ├── config/
│ │ │ └── MyMapper.java
│ │ ├── mapper/
│ │ │ ├── SeqenceMapper.java
│ │ │ └── UserMapper.java
│ │ └── service/
│ │ ├── IService.java
│ │ ├── UserService.java
│ │ └── impl/
│ │ ├── BaseService.java
│ │ └── UserServiceImpl.java
│ └── resources/
│ ├── application.yml
│ ├── mapper/
│ │ └── UserMapper.xml
│ └── mybatis-generator.xml
├── 28.Spring-Cloud-Eureka-Server-Discovery/
│ ├── Eureka-Client/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ └── controller/
│ │ │ └── TestController.java
│ │ └── resources/
│ │ └── application.yml
│ ├── Eureka-Service/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ ├── application-peer1.yml
│ │ ├── application-peer2.yml
│ │ └── application.yml
│ └── Server-Consumer/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ ├── DemoApplication.java
│ │ └── controller/
│ │ └── TestController.java
│ └── resources/
│ └── application.yml
├── 29.Spring-Cloud-Ribbon-LoadBalance/
│ ├── Eureka-Client/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── controller/
│ │ │ │ ├── TestController.java
│ │ │ │ └── UserController.java
│ │ │ └── domain/
│ │ │ └── User.java
│ │ └── resources/
│ │ └── application.yml
│ ├── Eureka-Service/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ ├── application-peer1.yml
│ │ ├── application-peer2.yml
│ │ └── application.yml
│ └── Ribbon-Consumer/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ ├── DemoApplication.java
│ │ ├── controller/
│ │ │ └── TestController.java
│ │ └── domain/
│ │ └── User.java
│ └── resources/
│ └── application.yml
├── 30.Spring-Cloud-Hystrix-Circuit-Breaker/
│ ├── Eureka-Client/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── controller/
│ │ │ │ ├── TestController.java
│ │ │ │ └── UserController.java
│ │ │ └── domain/
│ │ │ └── User.java
│ │ └── resources/
│ │ └── application.yml
│ ├── Eureka-Service/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ ├── application-peer1.yml
│ │ ├── application-peer2.yml
│ │ └── application.yml
│ └── Ribbon-Consumer/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ ├── DemoApplication.java
│ │ ├── Service/
│ │ │ └── UserService.java
│ │ ├── controller/
│ │ │ └── TestController.java
│ │ ├── domain/
│ │ │ └── User.java
│ │ └── filter/
│ │ └── HystrixRequestContextServletFilter.java
│ └── resources/
│ └── application.yml
├── 31.Spring-Cloud-Hystrix-Dashboard-Turbine/
│ ├── Eureka-Client/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── controller/
│ │ │ │ ├── TestController.java
│ │ │ │ └── UserController.java
│ │ │ └── domain/
│ │ │ └── User.java
│ │ └── resources/
│ │ └── application.yml
│ ├── Eureka-Service/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ ├── application-peer1.yml
│ │ ├── application-peer2.yml
│ │ └── application.yml
│ ├── Hystrix-Dashboard/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ └── application.yml
│ ├── Ribbon-Consumer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── Service/
│ │ │ │ └── UserService.java
│ │ │ ├── controller/
│ │ │ │ └── TestController.java
│ │ │ ├── domain/
│ │ │ │ └── User.java
│ │ │ └── filter/
│ │ │ └── HystrixRequestContextServletFilter.java
│ │ └── resources/
│ │ └── application.yml
│ └── Turbine/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ └── DemoApplication.java
│ └── resources/
│ └── application.yml
├── 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/
│ ├── Eureka-Client/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── controller/
│ │ │ │ ├── TestController.java
│ │ │ │ └── UserController.java
│ │ │ └── domain/
│ │ │ └── User.java
│ │ └── resources/
│ │ └── application.yml
│ ├── Eureka-Service/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ ├── application-peer1.yml
│ │ ├── application-peer2.yml
│ │ └── application.yml
│ ├── Hystrix-Dashboard/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ └── application.yml
│ ├── Ribbon-Consumer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── Service/
│ │ │ │ └── UserService.java
│ │ │ ├── controller/
│ │ │ │ └── TestController.java
│ │ │ ├── domain/
│ │ │ │ └── User.java
│ │ │ └── filter/
│ │ │ └── HystrixRequestContextServletFilter.java
│ │ └── resources/
│ │ └── application.yml
│ └── Turbine-Stream/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ └── DemoApplication.java
│ └── resources/
│ └── application.yml
├── 33.Spring-Cloud-Feign-Declarative-REST-Client/
│ ├── Eureka-Client/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── controller/
│ │ │ │ ├── TestController.java
│ │ │ │ └── UserController.java
│ │ │ └── domain/
│ │ │ └── User.java
│ │ └── resources/
│ │ └── application.yml
│ ├── Eureka-Service/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ ├── application-peer1.yml
│ │ ├── application-peer2.yml
│ │ └── application.yml
│ └── Feign-Consumer/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ ├── DemoApplication.java
│ │ ├── controller/
│ │ │ └── TestController.java
│ │ ├── domain/
│ │ │ └── User.java
│ │ └── service/
│ │ ├── UserService.java
│ │ └── UserServiceFallback.java
│ └── resources/
│ └── application.yml
├── 34.Start-Spring-Security/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── SecurityApplication.java
│ │ ├── security/
│ │ │ └── browser/
│ │ │ └── BrowserSecurityConfig.java
│ │ └── web/
│ │ └── controller/
│ │ └── TestController.java
│ └── resources/
│ └── application.yml
├── 35.Spring-Security-Authentication/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── SecurityApplication.java
│ │ ├── domain/
│ │ │ └── MyUser.java
│ │ ├── handler/
│ │ │ ├── MyAuthenticationFailureHandler.java
│ │ │ └── MyAuthenticationSucessHandler.java
│ │ ├── security/
│ │ │ └── browser/
│ │ │ ├── BrowserSecurityConfig.java
│ │ │ └── UserDetailService.java
│ │ └── web/
│ │ └── controller/
│ │ ├── BrowserSecurityController.java
│ │ └── TestController.java
│ └── resources/
│ ├── application.yml
│ └── resources/
│ ├── css/
│ │ └── login.css
│ └── login.html
├── 36.Spring-Security-ValidateCode/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── SecurityApplication.java
│ │ ├── domain/
│ │ │ └── MyUser.java
│ │ ├── handler/
│ │ │ ├── MyAuthenticationFailureHandler.java
│ │ │ └── MyAuthenticationSucessHandler.java
│ │ ├── security/
│ │ │ └── browser/
│ │ │ ├── BrowserSecurityConfig.java
│ │ │ └── UserDetailService.java
│ │ ├── validate/
│ │ │ └── code/
│ │ │ ├── ImageCode.java
│ │ │ ├── ValidateCodeException.java
│ │ │ └── ValidateCodeFilter.java
│ │ └── web/
│ │ └── controller/
│ │ ├── BrowserSecurityController.java
│ │ ├── TestController.java
│ │ └── ValidateController.java
│ └── resources/
│ ├── application.yml
│ └── resources/
│ ├── css/
│ │ └── login.css
│ └── login.html
├── 37.Spring-Security-RememberMe/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── SecurityApplication.java
│ │ ├── domain/
│ │ │ └── MyUser.java
│ │ ├── handler/
│ │ │ ├── MyAuthenticationFailureHandler.java
│ │ │ └── MyAuthenticationSucessHandler.java
│ │ ├── security/
│ │ │ └── browser/
│ │ │ ├── BrowserSecurityConfig.java
│ │ │ └── UserDetailService.java
│ │ ├── validate/
│ │ │ └── code/
│ │ │ ├── ImageCode.java
│ │ │ ├── ValidateCodeException.java
│ │ │ └── ValidateCodeFilter.java
│ │ └── web/
│ │ └── controller/
│ │ ├── BrowserSecurityController.java
│ │ ├── TestController.java
│ │ └── ValidateController.java
│ └── resources/
│ ├── application.yml
│ └── resources/
│ ├── css/
│ │ └── login.css
│ └── login.html
├── 38.Spring-Security-SmsCode/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── SecurityApplication.java
│ │ ├── domain/
│ │ │ └── MyUser.java
│ │ ├── handler/
│ │ │ ├── MyAuthenticationFailureHandler.java
│ │ │ └── MyAuthenticationSucessHandler.java
│ │ ├── security/
│ │ │ └── browser/
│ │ │ ├── BrowserSecurityConfig.java
│ │ │ └── UserDetailService.java
│ │ ├── validate/
│ │ │ ├── code/
│ │ │ │ ├── ImageCode.java
│ │ │ │ ├── ValidateCodeException.java
│ │ │ │ └── ValidateCodeFilter.java
│ │ │ └── smscode/
│ │ │ ├── SmsAuthenticationConfig.java
│ │ │ ├── SmsAuthenticationFilter.java
│ │ │ ├── SmsAuthenticationProvider.java
│ │ │ ├── SmsAuthenticationToken.java
│ │ │ ├── SmsCode.java
│ │ │ └── SmsCodeFilter.java
│ │ └── web/
│ │ └── controller/
│ │ ├── BrowserSecurityController.java
│ │ ├── TestController.java
│ │ └── ValidateController.java
│ └── resources/
│ ├── application.yml
│ └── resources/
│ ├── css/
│ │ └── login.css
│ └── login.html
├── 39.Spring-Cloud-Zuul-Router/
│ ├── Eureka-Client/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── controller/
│ │ │ │ ├── TestController.java
│ │ │ │ └── UserController.java
│ │ │ └── domain/
│ │ │ └── User.java
│ │ └── resources/
│ │ └── application.yml
│ ├── Eureka-Service/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ ├── application-peer1.yml
│ │ ├── application-peer2.yml
│ │ └── application.yml
│ ├── Feign-Consumer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── controller/
│ │ │ │ └── TestController.java
│ │ │ ├── domain/
│ │ │ │ └── User.java
│ │ │ └── service/
│ │ │ ├── UserService.java
│ │ │ └── UserServiceFallback.java
│ │ └── resources/
│ │ └── application.yml
│ └── Zuul-Gateway/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ ├── DemoApplication.java
│ │ └── filter/
│ │ └── PreSendForwardFilter.java
│ └── resources/
│ └── application.yml
├── 40.Spring-Boot-Dubbo-Zookeeper/
│ ├── common-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── common/
│ │ └── api/
│ │ └── HelloService.java
│ ├── pom.xml
│ ├── server-consumer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cc/
│ │ │ └── mrbird/
│ │ │ ├── ConsumerApplicaiton.java
│ │ │ └── consumer/
│ │ │ └── controller/
│ │ │ └── HelloController.java
│ │ └── resources/
│ │ └── application.yml
│ └── server-provider/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── ProviderApplicaiton.java
│ │ └── provider/
│ │ └── service/
│ │ └── HelloServiceImpl.java
│ └── resources/
│ └── application.yml
├── 41.Spring-Cloud-Config/
│ ├── Eureka-Service/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ ├── application-peer1.yml
│ │ ├── application-peer2.yml
│ │ └── application.yml
│ ├── config-client/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cc/
│ │ │ └── mrbird/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ └── controller/
│ │ │ └── TestController.java
│ │ └── resources/
│ │ └── bootstrap.yml
│ ├── config-server/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cc/
│ │ │ └── mrbird/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ ├── application.yml
│ │ ├── bootstrap.yml
│ │ └── config-server.keystore
│ └── properties/
│ ├── febs-dev.yml
│ ├── febs-pro.yml
│ ├── febs-test.yml
│ └── febs.yml
├── 42.Spring-Cloud-Bus/
│ ├── Eureka-Service/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ ├── application-peer1.yml
│ │ ├── application-peer2.yml
│ │ └── application.yml
│ ├── config-client/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cc/
│ │ │ └── mrbird/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ └── controller/
│ │ │ └── TestController.java
│ │ └── resources/
│ │ └── bootstrap.yml
│ └── config-server/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── demo/
│ │ └── DemoApplication.java
│ └── resources/
│ ├── application.yml
│ ├── bootstrap.yml
│ └── config-server.keystore
├── 43.Spring-Cloud-Sleuth/
│ ├── Eureka-Service/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ └── DemoApplication.java
│ │ └── resources/
│ │ ├── application-peer1.yml
│ │ ├── application-peer2.yml
│ │ └── application.yml
│ ├── Server-Provider1/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ └── controller/
│ │ │ └── HelloController.java
│ │ └── resources/
│ │ └── application.yml
│ ├── Server-Provider2/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ └── controller/
│ │ │ └── HelloController.java
│ │ └── resources/
│ │ └── application.yml
│ └── Zipkin-Server/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ └── DemoApplication.java
│ └── resources/
│ └── application.yml
├── 44.Spring-Boot-Autoconfiguration/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── annotation/
│ │ │ │ ├── EnableHelloWorld.java
│ │ │ │ ├── FirstLevelService.java
│ │ │ │ └── SecondLevelService.java
│ │ │ ├── bootstrap/
│ │ │ │ ├── EnableAutoConfigurationBootstrap.java
│ │ │ │ ├── ServiceBootstrap.java
│ │ │ │ └── TestEnableBootstap.java
│ │ │ ├── configuration/
│ │ │ │ ├── HelloWorldAutoConfiguration.java
│ │ │ │ └── HelloWorldConfiguration.java
│ │ │ ├── selector/
│ │ │ │ └── HelloWorldImportSelector.java
│ │ │ └── service/
│ │ │ └── TestService.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── spring.factories
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── example/
│ └── demo/
│ └── DemoApplicationTests.java
├── 45.Spring-Boot-SpringApplication/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── initializer/
│ │ │ │ ├── AfterHelloApplicationContextInitializer.java
│ │ │ │ └── HelloApplicationContextInitializer.java
│ │ │ ├── listener/
│ │ │ │ ├── AfterContextClosedEventListener.java
│ │ │ │ ├── ContextClosedEventListener.java
│ │ │ │ └── HelloApplicationRunListener.java
│ │ │ └── runner/
│ │ │ ├── HelloApplicationRunner.java
│ │ │ └── HelloCommandLineRunner.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ └── spring.factories
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── example/
│ └── demo/
│ └── DemoApplicationTests.java
├── 46.Spring-Boot-Hibernate-Validator/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── controller/
│ │ │ │ └── TestController.java
│ │ │ ├── domain/
│ │ │ │ └── User.java
│ │ │ └── handler/
│ │ │ └── GlobalExceptionHandler.java
│ │ └── resources/
│ │ ├── ValidationMessages.properties
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── example/
│ └── demo/
│ └── DemoApplicationTests.java
├── 47.Spring-Boot-Content-Negotiation/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── config/
│ │ │ │ └── WebConfigurer.java
│ │ │ ├── controller/
│ │ │ │ └── TestController.java
│ │ │ ├── converter/
│ │ │ │ └── PropertiesHttpMessageConverter.java
│ │ │ ├── handler/
│ │ │ │ └── PropertiesHandlerMethodReturnValueHandler.java
│ │ │ └── resolver/
│ │ │ └── PropertiesHandlerMethodArgumentResolver.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── example/
│ └── demo/
│ └── DemoApplicationTests.java
├── 48.Spring-Boot-CORS-Support/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── config/
│ │ │ │ └── WebConfigurer.java
│ │ │ └── controller/
│ │ │ └── TestController.java
│ │ └── resources/
│ │ ├── application.properties
│ │ └── templates/
│ │ └── index.html
│ └── test/
│ └── java/
│ └── com/
│ └── example/
│ └── demo/
│ └── DemoApplicationTests.java
├── 49.Spring-Boot-Async/
│ ├── pom.xml
│ └── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── DemoApplication.java
│ │ │ ├── config/
│ │ │ │ └── AsyncPoolConfig.java
│ │ │ ├── controller/
│ │ │ │ └── TestController.java
│ │ │ └── service/
│ │ │ └── TestService.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
│ └── java/
│ └── com/
│ └── example/
│ └── demo/
│ └── DemoApplicationTests.java
├── 50.Spring-Regist-Bean/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── DemoApplication.java
│ │ └── demo/
│ │ ├── condition/
│ │ │ └── MyCondition.java
│ │ ├── config/
│ │ │ └── WebConfig.java
│ │ ├── controller/
│ │ │ └── UserController.java
│ │ ├── dao/
│ │ │ └── UserMapper.java
│ │ ├── domain/
│ │ │ ├── Apple.java
│ │ │ ├── Banana.java
│ │ │ ├── Cherry.java
│ │ │ ├── Hello.java
│ │ │ ├── Strawberry.java
│ │ │ ├── User.java
│ │ │ ├── UserDetail.java
│ │ │ └── Watermelon.java
│ │ ├── factory/
│ │ │ └── CherryFactoryBean.java
│ │ ├── filter/
│ │ │ └── MyTypeFilter.java
│ │ ├── register/
│ │ │ └── MyImportBeanDefinitionRegistrar.java
│ │ ├── selector/
│ │ │ └── MyImportSelector.java
│ │ └── service/
│ │ ├── CalculateService.java
│ │ ├── UserService.java
│ │ └── impl/
│ │ ├── Java7CalculateServiceImpl.java
│ │ └── Java8CalculateServiceImpl.java
│ └── resources/
│ └── application.properties
├── 51.Spring-Bean-Lifecycle/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── DemoApplication.java
│ │ └── demo/
│ │ ├── config/
│ │ │ ├── MyBeanPostProcessor.java
│ │ │ └── WebConfig.java
│ │ └── domain/
│ │ ├── Bird.java
│ │ ├── Fish.java
│ │ └── User.java
│ └── resources/
│ └── application.properties
├── 52.Dubbo-OPS-Mointor/
│ └── spring-boot-dubbo-applicaiton/
│ ├── common-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── common/
│ │ └── api/
│ │ └── HelloService.java
│ ├── pom.xml
│ ├── server-consumer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cc/
│ │ │ └── mrbird/
│ │ │ ├── ConsumerApplicaiton.java
│ │ │ └── consumer/
│ │ │ └── controller/
│ │ │ └── HelloController.java
│ │ └── resources/
│ │ └── application.yml
│ └── server-provider/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── ProviderApplicaiton.java
│ │ └── provider/
│ │ └── service/
│ │ └── HelloServiceImpl.java
│ └── resources/
│ └── application.yml
├── 53.Dubbo-High-Availability/
│ ├── common-api/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── common/
│ │ └── api/
│ │ └── HelloService.java
│ ├── pom.xml
│ ├── server-consumer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cc/
│ │ │ └── mrbird/
│ │ │ ├── ConsumerApplicaiton.java
│ │ │ └── consumer/
│ │ │ └── controller/
│ │ │ └── HelloController.java
│ │ └── resources/
│ │ └── application.yml
│ └── server-provider/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── ProviderApplicaiton.java
│ │ └── provider/
│ │ └── service/
│ │ └── HelloServiceImpl.java
│ └── resources/
│ └── application.yml
├── 54.Spring-Boot-Kafka/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ ├── KafkaApplication.java
│ │ ├── config/
│ │ │ ├── KafkaConsumerConfig.java
│ │ │ └── KafkaProducerConfig.java
│ │ ├── controller/
│ │ │ └── SendMessageController.java
│ │ ├── domain/
│ │ │ └── Message.java
│ │ └── listener/
│ │ └── KafkaMessageListener.java
│ └── resources/
│ └── application.yml
├── 55.Spring-Cloud-Consul/
│ ├── server-consumer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── demo/
│ │ │ ├── ServerConsumerApplication.java
│ │ │ └── TestController.java
│ │ └── resources/
│ │ └── application.yml
│ └── server-proivder/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ ├── ServerProviderApplication.java
│ │ └── TestController.java
│ └── resources/
│ └── application.yml
├── 56.Spring-Boot-MongoDB-crud/
│ ├── Mongo DB crud.postman_collection.json
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── mongodb/
│ │ ├── MongodbApplication.java
│ │ ├── controller/
│ │ │ └── UserController.java
│ │ ├── dao/
│ │ │ └── UserDao.java
│ │ ├── domain/
│ │ │ └── User.java
│ │ └── service/
│ │ └── UserService.java
│ └── resources/
│ └── application.yml
├── 57.Spring-Boot-WebFlux/
│ ├── async-servlet/
│ │ ├── src/
│ │ │ ├── AsyncServlet.java
│ │ │ └── SyncServlet.java
│ │ └── web/
│ │ ├── WEB-INF/
│ │ │ └── web.xml
│ │ └── index.html
│ └── webflux/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── webflux/
│ │ ├── FluxTest.java
│ │ ├── MonoFluxTest.java
│ │ ├── MonoTest.java
│ │ ├── TestController.java
│ │ ├── ViewController.java
│ │ └── WebfluxApplication.java
│ └── resources/
│ ├── application.yml
│ └── templates/
│ └── flux.html
├── 58.Spring-Boot-WebFlux-crud/
│ ├── pom.xml
│ ├── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── example/
│ │ │ └── webflux/
│ │ │ ├── WebfluxApplication.java
│ │ │ ├── controller/
│ │ │ │ └── UserController.java
│ │ │ ├── dao/
│ │ │ │ └── UserDao.java
│ │ │ ├── domain/
│ │ │ │ └── User.java
│ │ │ └── service/
│ │ │ └── UserService.java
│ │ └── resources/
│ │ └── application.yml
│ └── webflux crud.postman_collection.json
├── 59.Spring-Security-SessionManager/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── SecurityApplication.java
│ │ ├── domain/
│ │ │ └── MyUser.java
│ │ ├── handler/
│ │ │ ├── MyAuthenticationFailureHandler.java
│ │ │ └── MyAuthenticationSucessHandler.java
│ │ ├── security/
│ │ │ └── browser/
│ │ │ ├── BrowserSecurityConfig.java
│ │ │ └── UserDetailService.java
│ │ ├── session/
│ │ │ └── MySessionExpiredStrategy.java
│ │ ├── validate/
│ │ │ ├── code/
│ │ │ │ ├── ImageCode.java
│ │ │ │ ├── ValidateCodeException.java
│ │ │ │ └── ValidateCodeFilter.java
│ │ │ └── smscode/
│ │ │ ├── SmsAuthenticationConfig.java
│ │ │ ├── SmsAuthenticationFilter.java
│ │ │ ├── SmsAuthenticationProvider.java
│ │ │ ├── SmsAuthenticationToken.java
│ │ │ ├── SmsCode.java
│ │ │ └── SmsCodeFilter.java
│ │ └── web/
│ │ └── controller/
│ │ ├── BrowserSecurityController.java
│ │ ├── TestController.java
│ │ └── ValidateController.java
│ └── resources/
│ ├── application.yml
│ └── resources/
│ ├── css/
│ │ └── login.css
│ └── login.html
├── 60.Spring-Security-Logout/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── SecurityApplication.java
│ │ ├── domain/
│ │ │ └── MyUser.java
│ │ ├── handler/
│ │ │ ├── MyAuthenticationFailureHandler.java
│ │ │ ├── MyAuthenticationSucessHandler.java
│ │ │ └── MyLogOutSuccessHandler.java
│ │ ├── security/
│ │ │ └── browser/
│ │ │ ├── BrowserSecurityConfig.java
│ │ │ └── UserDetailService.java
│ │ ├── session/
│ │ │ └── MySessionExpiredStrategy.java
│ │ ├── validate/
│ │ │ ├── code/
│ │ │ │ ├── ImageCode.java
│ │ │ │ ├── ValidateCodeException.java
│ │ │ │ └── ValidateCodeFilter.java
│ │ │ └── smscode/
│ │ │ ├── SmsAuthenticationConfig.java
│ │ │ ├── SmsAuthenticationFilter.java
│ │ │ ├── SmsAuthenticationProvider.java
│ │ │ ├── SmsAuthenticationToken.java
│ │ │ ├── SmsCode.java
│ │ │ └── SmsCodeFilter.java
│ │ └── web/
│ │ └── controller/
│ │ ├── BrowserSecurityController.java
│ │ ├── TestController.java
│ │ └── ValidateController.java
│ └── resources/
│ ├── application.yml
│ └── resources/
│ ├── css/
│ │ └── login.css
│ └── login.html
├── 61.Spring-security-Permission/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ ├── SecurityApplication.java
│ │ ├── domain/
│ │ │ └── MyUser.java
│ │ ├── handler/
│ │ │ ├── MyAuthenticationAccessDeniedHandler.java
│ │ │ ├── MyAuthenticationFailureHandler.java
│ │ │ ├── MyAuthenticationSucessHandler.java
│ │ │ └── MyLogOutSuccessHandler.java
│ │ ├── security/
│ │ │ └── browser/
│ │ │ ├── BrowserSecurityConfig.java
│ │ │ └── UserDetailService.java
│ │ ├── session/
│ │ │ └── MySessionExpiredStrategy.java
│ │ ├── validate/
│ │ │ ├── code/
│ │ │ │ ├── ImageCode.java
│ │ │ │ ├── ValidateCodeException.java
│ │ │ │ └── ValidateCodeFilter.java
│ │ │ └── smscode/
│ │ │ ├── SmsAuthenticationConfig.java
│ │ │ ├── SmsAuthenticationFilter.java
│ │ │ ├── SmsAuthenticationProvider.java
│ │ │ ├── SmsAuthenticationToken.java
│ │ │ ├── SmsCode.java
│ │ │ └── SmsCodeFilter.java
│ │ └── web/
│ │ └── controller/
│ │ ├── BrowserSecurityController.java
│ │ ├── TestController.java
│ │ └── ValidateController.java
│ └── resources/
│ ├── application.yml
│ └── resources/
│ ├── css/
│ │ └── login.css
│ └── login.html
├── 62.Spring-Boot-Shiro-JWT/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── example/
│ │ └── demo/
│ │ ├── DemoApplication.java
│ │ ├── authentication/
│ │ │ ├── JWTFilter.java
│ │ │ ├── JWTToken.java
│ │ │ ├── JWTUtil.java
│ │ │ ├── ShiroConfig.java
│ │ │ └── ShiroRealm.java
│ │ ├── controller/
│ │ │ ├── LoginController.java
│ │ │ └── TestController.java
│ │ ├── domain/
│ │ │ ├── Response.java
│ │ │ └── User.java
│ │ ├── exception/
│ │ │ └── SystemException.java
│ │ ├── handler/
│ │ │ └── GlobalExceptionHandler.java
│ │ ├── properties/
│ │ │ └── SystemProperties.java
│ │ ├── runner/
│ │ │ └── PrintRunner.java
│ │ └── utils/
│ │ ├── DateUtil.java
│ │ ├── MD5Util.java
│ │ ├── SpringContextUtil.java
│ │ └── SystemUtils.java
│ └── resources/
│ ├── ValidationMessages.properties
│ ├── application.yml
│ ├── postman.json
│ └── readme.md
├── 63.Spring-Security-OAuth2-Guide/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── security/
│ │ ├── SecurityApplication.java
│ │ ├── config/
│ │ │ ├── AuthorizationServerConfig.java
│ │ │ └── ResourceServerConfig.java
│ │ ├── controller/
│ │ │ └── UserController.java
│ │ ├── domain/
│ │ │ └── MyUser.java
│ │ └── service/
│ │ └── UserDetailService.java
│ └── resources/
│ └── application.yml
├── 64.Spring-Security-OAuth2-Customize/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── security/
│ │ ├── SecurityApplication.java
│ │ ├── config/
│ │ │ ├── AuthorizationServerConfig.java
│ │ │ └── ResourceServerConfig.java
│ │ ├── controller/
│ │ │ ├── UserController.java
│ │ │ └── ValidateController.java
│ │ ├── domain/
│ │ │ └── MyUser.java
│ │ ├── handler/
│ │ │ ├── MyAuthenticationFailureHandler.java
│ │ │ └── MyAuthenticationSucessHandler.java
│ │ ├── service/
│ │ │ ├── RedisCodeService.java
│ │ │ └── UserDetailService.java
│ │ └── validate/
│ │ └── smscode/
│ │ ├── SmsAuthenticationConfig.java
│ │ ├── SmsAuthenticationFilter.java
│ │ ├── SmsAuthenticationProvider.java
│ │ ├── SmsAuthenticationToken.java
│ │ ├── SmsCode.java
│ │ └── SmsCodeFilter.java
│ └── resources/
│ └── application.yml
├── 65.Spring-Security-OAuth2-Config/
│ ├── pom.xml
│ ├── security.postman_collection.json
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── security/
│ │ ├── SecurityApplication.java
│ │ ├── config/
│ │ │ ├── AuthorizationServerConfig.java
│ │ │ ├── JWTokenConfig.java
│ │ │ ├── ResourceServerConfig.java
│ │ │ ├── SecurityConfig.java
│ │ │ └── TokenStoreConfig.java
│ │ ├── controller/
│ │ │ ├── UserController.java
│ │ │ └── ValidateController.java
│ │ ├── domain/
│ │ │ └── MyUser.java
│ │ ├── enhancer/
│ │ │ └── JWTokenEnhancer.java
│ │ ├── handler/
│ │ │ ├── MyAuthenticationFailureHandler.java
│ │ │ └── MyAuthenticationSucessHandler.java
│ │ ├── service/
│ │ │ ├── RedisCodeService.java
│ │ │ └── UserDetailService.java
│ │ └── validate/
│ │ └── smscode/
│ │ ├── SmsAuthenticationConfig.java
│ │ ├── SmsAuthenticationFilter.java
│ │ ├── SmsAuthenticationProvider.java
│ │ ├── SmsAuthenticationToken.java
│ │ ├── SmsCode.java
│ │ └── SmsCodeFilter.java
│ └── resources/
│ └── application.yml
├── 66.Spring-Security-OAuth2-SSO/
│ ├── pom.xml
│ ├── sso-application-one/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cc/
│ │ │ └── mrbird/
│ │ │ └── sso/
│ │ │ ├── SsoApplicaitonOne.java
│ │ │ └── client/
│ │ │ ├── config/
│ │ │ │ └── WebSecurityConfigurer.java
│ │ │ └── controller/
│ │ │ └── UserController.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── static/
│ │ └── index.html
│ ├── sso-application-two/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cc/
│ │ │ └── mrbird/
│ │ │ └── sso/
│ │ │ ├── SsoApplicaitonTwo.java
│ │ │ └── client/
│ │ │ └── controller/
│ │ │ └── UserController.java
│ │ └── resources/
│ │ ├── application.yml
│ │ └── static/
│ │ └── index.html
│ └── sso-server/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── sso/
│ │ ├── SsoServerApplication.java
│ │ └── server/
│ │ ├── config/
│ │ │ ├── SsoAuthorizationServerConfig.java
│ │ │ └── WebSecurityConfig.java
│ │ ├── domain/
│ │ │ └── MyUser.java
│ │ └── service/
│ │ └── UserDetailService.java
│ └── resources/
│ └── application.yml
├── 67.spring-batch-start/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── batch/
│ │ ├── SpringBatchStartApplication.java
│ │ ├── decider/
│ │ │ └── MyDecider.java
│ │ └── job/
│ │ ├── DeciderJobDemo.java
│ │ ├── FirstJobDemo.java
│ │ ├── FlowJobDemo.java
│ │ ├── MultiStepJobDemo.java
│ │ ├── NestedJobDemo.java
│ │ └── SplitJobDemo.java
│ └── resources/
│ └── application.yml
├── 68.spring-batch-itemreader/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── batch/
│ │ ├── SpringBatchItemreaderApplication.java
│ │ ├── entity/
│ │ │ └── TestData.java
│ │ ├── job/
│ │ │ ├── DataSourceItemReaderDemo.java
│ │ │ ├── FileItemReaderDemo.java
│ │ │ ├── JSONFileItemReaderDemo.java
│ │ │ ├── MultiFileIteamReaderDemo.java
│ │ │ ├── MySimpleItemReaderDemo.java
│ │ │ └── XmlFileItemReaderDemo.java
│ │ └── reader/
│ │ └── MySimpleIteamReader.java
│ └── resources/
│ ├── TEST.sql
│ ├── application.yml
│ ├── file
│ ├── file.json
│ ├── file.xml
│ ├── file1
│ └── file2
├── 69.spring-batch-itemwriter/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── batch/
│ │ ├── SpringBatchItemwriterApplication.java
│ │ ├── entity/
│ │ │ └── TestData.java
│ │ ├── job/
│ │ │ ├── DatabaseItemWriterDemo.java
│ │ │ ├── FileItemWriterDemo.java
│ │ │ ├── JsonFileItemWriterDemo.java
│ │ │ ├── MultiFileItemWriteDemo.java
│ │ │ └── XmlFileItemWriterDemo.java
│ │ ├── reader/
│ │ │ └── ItemReaderConfigure.java
│ │ └── writer/
│ │ └── ItemWriterConfigure.java
│ └── resources/
│ └── application.yml
├── 70.spring-batch-itemprocessor/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── batch/
│ │ ├── SpringBatchItemprocessorApplication.java
│ │ ├── entity/
│ │ │ ├── TestData.java
│ │ │ ├── job/
│ │ │ │ ├── BeanValidatingItemProcessorDemo.java
│ │ │ │ ├── CompositeItemProcessorDemo.java
│ │ │ │ ├── TestDataFilterItemProcessorDemo.java
│ │ │ │ ├── TestDataTransformItemPorcessorDemo.java
│ │ │ │ └── ValidatingItemProcessorDemo.java
│ │ │ └── reader/
│ │ │ └── ItemReaderConfigure.java
│ │ └── processor/
│ │ ├── TestDataFilterItemProcessor.java
│ │ └── TestDataTransformItemPorcessor.java
│ └── resources/
│ └── application.yml
├── 71.spring-batch-listener/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── batch/
│ │ ├── SpringBatchListenerApplication.java
│ │ ├── job/
│ │ │ ├── CompositeJobExecutionListenerJobDemo.java
│ │ │ └── ListenerTestJobDemo.java
│ │ └── listener/
│ │ ├── MyChunkListener.java
│ │ ├── MyItemProcessListener.java
│ │ ├── MyItemReaderListener.java
│ │ ├── MyItemWriterListener.java
│ │ ├── MyJobExecutionListener.java
│ │ └── MyStepExecutionListener.java
│ └── resources/
│ └── application.yml
├── 72.spring-batch-exception/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── batch/
│ │ ├── SpringBatchExceptionApplication.java
│ │ ├── exception/
│ │ │ └── MyJobExecutionException.java
│ │ ├── job/
│ │ │ ├── DefaultExceptionJobDemo.java
│ │ │ ├── RestartJobDemo.java
│ │ │ ├── RetryExceptionJobDemo.java
│ │ │ ├── SkipExceptionJobDemo.java
│ │ │ └── TransactionJobDemo.java
│ │ └── listener/
│ │ └── MySkipListener.java
│ └── resources/
│ └── application.yml
├── 73.spring-batch-launcher/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── batch/
│ │ ├── SpringBatchLauncherApplication.java
│ │ ├── configure/
│ │ │ └── JobConfigure.java
│ │ ├── controller/
│ │ │ └── JobController.java
│ │ └── job/
│ │ └── MyJob.java
│ └── resources/
│ └── application.yml
├── 74.spring-cloud-alibaba-nacos-register/
│ ├── consumer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cc/
│ │ │ └── mrbird/
│ │ │ └── consumer/
│ │ │ ├── ConsumerApplication.java
│ │ │ ├── configure/
│ │ │ │ └── ConsumerConfigure.java
│ │ │ └── controller/
│ │ │ └── ConsumeController.java
│ │ └── resources/
│ │ └── application.yml
│ ├── pom.xml
│ └── provider/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── provider/
│ │ ├── ProviderApplication.java
│ │ └── controller/
│ │ └── HelloController.java
│ └── resources/
│ └── application.yml
├── 75.spring-cloud-alibaba-nacos-config/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── nacos/
│ │ ├── SpringCloudAlibabaNacosConfigApplication.java
│ │ └── controller/
│ │ └── TestController.java
│ └── resources/
│ ├── application.yml
│ └── bootstrap.yml
├── 76.spring-boot-websocket-socketjs/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── socket/
│ │ ├── SpringBootWebsocketSocketjsApplication.java
│ │ ├── configure/
│ │ │ └── WebSocketServerConfigure.java
│ │ └── handler/
│ │ └── MyStringWebSocketHandler.java
│ └── resources/
│ ├── application.properties
│ └── static/
│ └── client.html
├── 77.spring-cloud-alibaba-sentinel-dashboard-guide/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── sentinel/
│ │ ├── SpringCloudAlibabaSentinelFlowControlApplication.java
│ │ ├── controller/
│ │ │ └── TestController.java
│ │ └── service/
│ │ └── HelloService.java
│ └── resources/
│ └── application.yml
├── 78.spring-cloud-alibaba-sentinelresource/
│ ├── consumer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── cc/
│ │ │ └── mrbird/
│ │ │ └── consumer/
│ │ │ └── ConsumerApplication.java
│ │ └── resources/
│ │ └── application.yml
│ ├── pom.xml
│ └── provider/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── cc/
│ │ └── mrbird/
│ │ └── provider/
│ │ └── ProviderApplication.java
│ └── resources/
│ └── application.yml
├── LICENSE
└── readme.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*/.settings/
*/target/
*/.classpath
*/.project
================================================
FILE: 01.Start-Spring-Boot/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Start-Spring-Boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Start-Spring-Boot</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 01.Start-Spring-Boot/src/main/java/com/springboot/demo/DemoApplication.java
================================================
package com.springboot.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
public class DemoApplication {
@RequestMapping("/")
String index() {
return "hello spring boot";
}
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
================================================
FILE: 01.Start-Spring-Boot/src/main/resources/application.properties
================================================
================================================
FILE: 01.Start-Spring-Boot/src/test/java/com/springboot/demo/DemoApplicationTests.java
================================================
package com.springboot.demo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Test
public void contextLoads() {
}
}
================================================
FILE: 02.Spring-Boot-Config/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-Config</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Spring-Boot-Config</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<repositories>
<repository>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 02.Spring-Boot-Config/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import com.springboot.bean.ConfigBean;
import com.springboot.bean.TestConfigBean;
@SpringBootApplication
@EnableConfigurationProperties({ConfigBean.class,TestConfigBean.class})
//@ImportResource({"classpath:some-application.xml"})
public class Application {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.setAddCommandLineProperties(false);
app.run(args);
}
}
================================================
FILE: 02.Spring-Boot-Config/src/main/java/com/springboot/bean/BlogProperties.java
================================================
package com.springboot.bean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class BlogProperties {
@Value("${mrbird.blog.name}")
private String name;
@Value("${mrbird.blog.title}")
private String title;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
================================================
FILE: 02.Spring-Boot-Config/src/main/java/com/springboot/bean/ConfigBean.java
================================================
package com.springboot.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix="mrbird.blog")
public class ConfigBean {
private String name;
private String title;
private String wholeTitle;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getWholeTitle() {
return wholeTitle;
}
public void setWholeTitle(String wholeTitle) {
this.wholeTitle = wholeTitle;
}
}
================================================
FILE: 02.Spring-Boot-Config/src/main/java/com/springboot/bean/TestConfigBean.java
================================================
package com.springboot.bean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@Configuration
@ConfigurationProperties(prefix="test")
@PropertySource("classpath:test.properties")
@Component
public class TestConfigBean {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
================================================
FILE: 02.Spring-Boot-Config/src/main/java/com/springboot/controller/IndexController.java
================================================
package com.springboot.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.springboot.bean.BlogProperties;
import com.springboot.bean.ConfigBean;
import com.springboot.bean.TestConfigBean;
@RestController
public class IndexController {
@Autowired
private BlogProperties blogProperties;
@Autowired
private ConfigBean configBean;
@Autowired
private TestConfigBean testConfigBean;
@RequestMapping("/")
String index() {
return testConfigBean.getName()+","+testConfigBean.getAge();
}
}
================================================
FILE: 02.Spring-Boot-Config/src/main/resources/application-dev.properties
================================================
server.port=8080
================================================
FILE: 02.Spring-Boot-Config/src/main/resources/application-prod.properties
================================================
server.port=8081
================================================
FILE: 02.Spring-Boot-Config/src/main/resources/application.properties
================================================
mrbird.blog.name=mrbird's blog
mrbird.blog.title=Spring Boot
mrbird.blog.wholeTitle=${mrbird.blog.name}--${mrbird.blog.title}
spring.profiles.active=dev
================================================
FILE: 02.Spring-Boot-Config/src/main/resources/banner.txt
================================================
_ _ _ _ _ _
/ \ / \ / \ / \ / \ / \
( m | r | b | i | r | d )
\_/ \_/ \_/ \_/ \_/ \_/
================================================
FILE: 02.Spring-Boot-Config/src/main/resources/test.properties
================================================
test.name=KangKang
test.age=25
================================================
FILE: 02.Spring-Boot-Config/src/test/java/com/springboot/demo/DemoApplicationTests.java
================================================
package com.springboot.demo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
@Test
public void contextLoads() {
}
}
================================================
FILE: 03.Spring-Boot-MyBatis/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-MyBatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>6.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 03.Spring-Boot-MyBatis/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
================================================
FILE: 03.Spring-Boot-MyBatis/src/main/java/com/springboot/bean/Student.java
================================================
package com.springboot.bean;
import java.io.Serializable;
public class Student implements Serializable{
private static final long serialVersionUID = -339516038496531943L;
private String sno;
private String name;
private String sex;
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
================================================
FILE: 03.Spring-Boot-MyBatis/src/main/java/com/springboot/controller/TestController.java
================================================
package com.springboot.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.springboot.bean.Student;
import com.springboot.service.StudentService;
@RestController
public class TestController {
@Autowired
private StudentService studentService;
@RequestMapping( value = "/querystudent", method = RequestMethod.GET)
public Student queryStudentBySno(String sno) {
return this.studentService.queryStudentBySno(sno);
}
}
================================================
FILE: 03.Spring-Boot-MyBatis/src/main/java/com/springboot/mapper/StudentMapper.java
================================================
package com.springboot.mapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Component;
import com.springboot.bean.Student;
@Component
@Mapper
public interface StudentMapper {
@Insert("insert into student(sno,sname,ssex) values(#{sno},#{name},#{sex})")
int add(Student student);
@Update("update student set sname=#{name},ssex=#{sex} where sno=#{sno}")
int update(Student student);
@Delete("delete from student where sno=#{sno}")
int deleteBysno(String sno);
@Select("select * from student where sno=#{sno}")
@Results(id = "student",value= {
@Result(property = "sno", column = "sno", javaType = String.class),
@Result(property = "name", column = "sname", javaType = String.class),
@Result(property = "sex", column = "ssex", javaType = String.class)
})
Student queryStudentBySno(String sno);
}
================================================
FILE: 03.Spring-Boot-MyBatis/src/main/java/com/springboot/service/StudentService.java
================================================
package com.springboot.service;
import com.springboot.bean.Student;
public interface StudentService {
int add(Student student);
int update(Student student);
int deleteBysno(String sno);
Student queryStudentBySno(String sno);
}
================================================
FILE: 03.Spring-Boot-MyBatis/src/main/java/com/springboot/service/impl/StudentServiceImp.java
================================================
package com.springboot.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.springboot.bean.Student;
import com.springboot.mapper.StudentMapper;
import com.springboot.service.StudentService;
@Service("studentService")
public class StudentServiceImp implements StudentService{
@Autowired
private StudentMapper studentMapper;
@Override
public int add(Student student) {
return this.studentMapper.add(student);
}
@Override
public int update(Student student) {
return this.studentMapper.update(student);
}
@Override
public int deleteBysno(String sno) {
return this.studentMapper.deleteBysno(sno);
}
@Override
public Student queryStudentBySno(String sno) {
return this.studentMapper.queryStudentBySno(sno);
}
}
================================================
FILE: 03.Spring-Boot-MyBatis/src/main/resources/application.yml
================================================
server:
context-path: /web
spring:
datasource:
druid:
# 数据库访问配置, 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:ORCL
username: test
password: 123456
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
# 连接等待超时时间
max-wait: 30000
# 配置检测可以关闭的空闲连接间隔时间
time-between-eviction-runs-millis: 60000
# 配置连接在池中的最小生存时间
min-evictable-idle-time-millis: 300000
validation-query: select '1' from dual
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-open-prepared-statements: 20
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
filters: stat,wall
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
aop-patterns: com.springboot.servie.*
# WebStatFilter配置
web-stat-filter:
enabled: true
# 添加过滤规则
url-pattern: /*
# 忽略过滤的格式
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
# StatViewServlet配置
stat-view-servlet:
enabled: true
# 访问路径为/druid时,跳转到StatViewServlet
url-pattern: /druid/*
# 是否能够重置数据
reset-enable: false
# 需要账号密码才能访问控制台
login-username: druid
login-password: druid123
# IP白名单
# allow: 127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
# deny: 192.168.1.218
# 配置StatFilter
filter:
stat:
log-slow-sql: true
================================================
FILE: 03.Spring-Boot-MyBatis/src/main/resources/init.sql
================================================
CREATE TABLE STUDENT (
SNO VARCHAR2(3 BYTE) NOT NULL ,
SNAME VARCHAR2(9 BYTE) NOT NULL ,
SSEX CHAR(2 BYTE) NOT NULL
);
INSERT INTO STUDENT VALUES ('001', 'KangKang', 'M ');
INSERT INTO STUDENT VALUES ('002', 'Mike', 'M ');
INSERT INTO STUDENT VALUES ('003', 'Jane', 'F ');
================================================
FILE: 04.Spring-Boot-JdbcTemplate/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-JdbcTemplate</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>6.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>nexus-aliyun</id>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
================================================
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/bean/Student.java
================================================
package com.springboot.bean;
import java.io.Serializable;
public class Student implements Serializable{
private static final long serialVersionUID = -339516038496531943L;
private String sno;
private String name;
private String sex;
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
================================================
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/controller/TestController.java
================================================
package com.springboot.controller;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.springboot.bean.Student;
import com.springboot.service.StudentService;
@RestController
public class TestController {
@Autowired
private StudentService studentService;
@RequestMapping(value = "/querystudent", method = RequestMethod.GET)
public Student queryStudentBySno(String sno) {
return this.studentService.queryStudentBySno(sno);
}
@RequestMapping(value = "/queryallstudent")
public List<Map<String, Object>> queryAllStudent() {
return this.studentService.queryStudentListMap();
}
@RequestMapping(value = "/addstudent", method = RequestMethod.GET)
public int saveStudent(String sno,String name,String sex) {
Student student = new Student();
student.setSno(sno);
student.setName(name);
student.setSex(sex);
return this.studentService.add(student);
}
@RequestMapping(value = "deletestudent", method = RequestMethod.GET)
public int deleteStudentBySno(String sno) {
return this.studentService.deleteBysno(sno);
}
}
================================================
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/dao/StudentDao.java
================================================
package com.springboot.dao;
import java.util.List;
import java.util.Map;
import com.springboot.bean.Student;
public interface StudentDao {
int add(Student student);
int update(Student student);
int deleteBysno(String sno);
List<Map<String,Object>> queryStudentsListMap();
Student queryStudentBySno(String sno);
}
================================================
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/dao/impl/StudentDaoImp.java
================================================
package com.springboot.dao.impl;
import java.sql.Types;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import com.springboot.bean.Student;
import com.springboot.dao.StudentDao;
import com.springboot.mapper.StudentMapper;
@Repository("studentDao")
public class StudentDaoImp implements StudentDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public int add(Student student) {
// String sql = "insert into student(sno,sname,ssex) values(?,?,?)";
// Object[] args = { student.getSno(), student.getName(), student.getSex() };
// int[] argTypes = { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR };
// return this.jdbcTemplate.update(sql, args, argTypes);
String sql = "insert into student(sno,sname,ssex) values(:sno,:name,:sex)";
NamedParameterJdbcTemplate npjt = new NamedParameterJdbcTemplate(this.jdbcTemplate.getDataSource());
return npjt.update(sql, new BeanPropertySqlParameterSource(student));
}
@Override
public int update(Student student) {
String sql = "update student set sname = ?,ssex = ? where sno = ?";
Object[] args = { student.getName(), student.getSex(), student.getSno() };
int[] argTypes = { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR };
return this.jdbcTemplate.update(sql, args, argTypes);
}
@Override
public int deleteBysno(String sno) {
String sql = "delete from student where sno = ?";
Object[] args = { sno };
int[] argTypes = { Types.VARCHAR };
return this.jdbcTemplate.update(sql, args, argTypes);
}
@Override
public List<Map<String, Object>> queryStudentsListMap() {
String sql = "select * from student";
return this.jdbcTemplate.queryForList(sql);
}
@Override
public Student queryStudentBySno(String sno) {
String sql = "select * from student where sno = ?";
Object[] args = { sno };
int[] argTypes = { Types.VARCHAR };
List<Student> studentList = this.jdbcTemplate.query(sql, args, argTypes, new StudentMapper());
if (studentList != null && studentList.size() > 0) {
return studentList.get(0);
} else {
return null;
}
}
}
================================================
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/mapper/StudentMapper.java
================================================
package com.springboot.mapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
import com.springboot.bean.Student;
public class StudentMapper implements RowMapper<Student>{
@Override
public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
Student student = new Student();
student.setSno(rs.getString("sno"));
student.setName(rs.getString("sname"));
student.setSex(rs.getString("ssex"));
return student;
}
}
================================================
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/service/StudentService.java
================================================
package com.springboot.service;
import java.util.List;
import java.util.Map;
import com.springboot.bean.Student;
public interface StudentService {
int add(Student student);
int update(Student student);
int deleteBysno(String sno);
List<Map<String, Object>> queryStudentListMap();
Student queryStudentBySno(String sno);
}
================================================
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/service/impl/StudentServiceImp.java
================================================
package com.springboot.service.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.springboot.bean.Student;
import com.springboot.dao.StudentDao;
import com.springboot.mapper.StudentMapper;
import com.springboot.service.StudentService;
@Service("studentService")
public class StudentServiceImp implements StudentService {
@Autowired
private StudentDao studentDao;
@Override
public int add(Student student) {
return this.studentDao.add(student);
}
@Override
public int update(Student student) {
return this.studentDao.update(student);
}
@Override
public int deleteBysno(String sno) {
return this.studentDao.deleteBysno(sno);
}
@Override
public List<Map<String, Object>> queryStudentListMap() {
return this.studentDao.queryStudentsListMap();
}
@Override
public Student queryStudentBySno(String sno) {
return this.studentDao.queryStudentBySno(sno);
}
}
================================================
FILE: 04.Spring-Boot-JdbcTemplate/src/main/resources/application.yml
================================================
server:
context-path: /web
spring:
datasource:
druid:
# 数据库访问配置, 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:ORCL
username: test
password: 123456
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
# 连接等待超时时间
max-wait: 30000
# 配置检测可以关闭的空闲连接间隔时间
time-between-eviction-runs-millis: 60000
# 配置连接在池中的最小生存时间
min-evictable-idle-time-millis: 300000
validation-query: select '1' from dual
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-open-prepared-statements: 20
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
filters: stat,wall
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
aop-patterns: com.springboot.servie.*
# WebStatFilter配置
web-stat-filter:
enabled: true
# 添加过滤规则
url-pattern: /*
# 忽略过滤的格式
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
# StatViewServlet配置
stat-view-servlet:
enabled: true
# 访问路径为/druid时,跳转到StatViewServlet
url-pattern: /druid/*
# 是否能够重置数据
reset-enable: false
# 需要账号密码才能访问控制台
login-username: druid
login-password: druid123
# IP白名单
# allow: 127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
# deny: 192.168.1.218
# 配置StatFilter
filter:
stat:
log-slow-sql: true
================================================
FILE: 04.Spring-Boot-JdbcTemplate/src/main/resources/init.sql
================================================
CREATE TABLE STUDENT (
SNO VARCHAR2(3 BYTE) NOT NULL ,
SNAME VARCHAR2(9 BYTE) NOT NULL ,
SSEX CHAR(2 BYTE) NOT NULL
);
INSERT INTO STUDENT VALUES ('001', 'KangKang', 'M ');
INSERT INTO STUDENT VALUES ('002', 'Mike', 'M ');
INSERT INTO STUDENT VALUES ('003', 'Jane', 'F ');
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-MyBatis-MultiDataSource</artifactId>
<version>1.0-snapshot</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- oracle驱动 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>6.0</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid数据源驱动 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/controller/StudentController.java
================================================
package com.springboot.controller;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.springboot.service.StudentService;
@RestController
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping("querystudentsfromoracle")
public List<Map<String, Object>> queryStudentsFromOracle(){
return this.studentService.getAllStudentsFromOralce();
}
@RequestMapping("querystudentsfrommysql")
public List<Map<String, Object>> queryStudentsFromMysql(){
return this.studentService.getAllStudentsFromMysql();
}
}
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/datasource/MysqlDatasourceConfig.java
================================================
package com.springboot.datasource;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
@Configuration
@MapperScan(basePackages = MysqlDatasourceConfig.PACKAGE, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlDatasourceConfig {
// mysqldao扫描路径
static final String PACKAGE = "com.springboot.mysqldao";
// mybatis mapper扫描路径
static final String MAPPER_LOCATION = "classpath:mapper/mysql/*.xml";
@Primary
@Bean(name = "mysqldatasource")
@ConfigurationProperties("spring.datasource.druid.mysql")
public DataSource mysqlDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "mysqlTransactionManager")
@Primary
public DataSourceTransactionManager mysqlTransactionManager() {
return new DataSourceTransactionManager(mysqlDataSource());
}
@Bean(name = "mysqlSqlSessionFactory")
@Primary
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqldatasource") DataSource dataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
//如果不使用xml的方式配置mapper,则可以省去下面这行mapper location的配置。
sessionFactory.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources(MysqlDatasourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/datasource/OracleDatasourceConfig.java
================================================
package com.springboot.datasource;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
@Configuration
@MapperScan(basePackages = OracleDatasourceConfig.PACKAGE,
sqlSessionFactoryRef = "oracleSqlSessionFactory")
public class OracleDatasourceConfig {
// oracledao扫描路径
static final String PACKAGE = "com.springboot.oracledao";
// mybatis mapper扫描路径
static final String MAPPER_LOCATION = "classpath:mapper/oracle/*.xml";
@Bean(name = "oracledatasource")
@ConfigurationProperties("spring.datasource.druid.oracle")
public DataSource oracleDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "oracleTransactionManager")
public DataSourceTransactionManager oracleTransactionManager() {
return new DataSourceTransactionManager(oracleDataSource());
}
@Bean(name = "oracleSqlSessionFactory")
public SqlSessionFactory oracleSqlSessionFactory(@Qualifier("oracledatasource") DataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
//如果不使用xml的方式配置mapper,则可以省去下面这行mapper location的配置。
sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver()
.getResources(OracleDatasourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
}
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/mysqldao/MysqlStudentMapper.java
================================================
package com.springboot.mysqldao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface MysqlStudentMapper {
List<Map<String, Object>> getAllStudents();
}
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/oracledao/OracleStudentMapper.java
================================================
package com.springboot.oracledao;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface OracleStudentMapper {
List<Map<String, Object>> getAllStudents();
}
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/service/StudentService.java
================================================
package com.springboot.service;
import java.util.List;
import java.util.Map;
public interface StudentService {
List<Map<String, Object>> getAllStudentsFromOralce();
List<Map<String, Object>> getAllStudentsFromMysql();
}
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/service/impl/StudentServiceImp.java
================================================
package com.springboot.service.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.springboot.mysqldao.MysqlStudentMapper;
import com.springboot.oracledao.OracleStudentMapper;
import com.springboot.service.StudentService;
@Service("studentService")
public class StudentServiceImp implements StudentService{
@Autowired
private OracleStudentMapper oracleStudentMapper;
@Autowired
private MysqlStudentMapper mysqlStudentMapper;
@Override
public List<Map<String, Object>> getAllStudentsFromOralce() {
return this.oracleStudentMapper.getAllStudents();
}
@Override
public List<Map<String, Object>> getAllStudentsFromMysql() {
return this.mysqlStudentMapper.getAllStudents();
}
}
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/resources/application.yml
================================================
server:
context-path: /web
spring:
datasource:
druid:
# 数据库访问配置, 使用druid数据源
# 数据源1 mysql
mysql:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
username: root
password: 123456
# 数据源2 oracle
oracle:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:ORCL
username: test
password: 123456
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
# 连接等待超时时间
max-wait: 30000
# 配置检测可以关闭的空闲连接间隔时间
time-between-eviction-runs-millis: 60000
# 配置连接在池中的最小生存时间
min-evictable-idle-time-millis: 300000
validation-query: select '1' from dual
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-open-prepared-statements: 20
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
filters: stat,wall
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
aop-patterns: com.springboot.servie.*
# WebStatFilter配置
web-stat-filter:
enabled: true
# 添加过滤规则
url-pattern: /*
# 忽略过滤的格式
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
# StatViewServlet配置
stat-view-servlet:
enabled: true
# 访问路径为/druid时,跳转到StatViewServlet
url-pattern: /druid/*
# 是否能够重置数据
reset-enable: false
# 需要账号密码才能访问控制台
login-username: druid
login-password: druid123
# IP白名单
# allow: 127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
# deny: 192.168.1.218
# 配置StatFilter
filter:
stat:
log-slow-sql: true
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/resources/mapper/mysql/MysqlStudentMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springboot.mysqldao.MysqlStudentMapper">
<select id="getAllStudents" resultType="java.util.Map">
select * from student
</select>
</mapper>
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/resources/mapper/oracle/OracleStudentMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springboot.oracledao.OracleStudentMapper">
<select id="getAllStudents" resultType="java.util.Map">
select * from student
</select>
</mapper>
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/resources/mysql_sql.sql
================================================
/*
Navicat MySQL Data Transfer
Source Server : localhost_3306
Source Server Version : 50717
Source Host : localhost:3306
Source Database : test
Target Server Type : MYSQL
Target Server Version : 50717
File Encoding : 65001
Date: 2018-05-02 14:32:22
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`SNO` varchar(3) NOT NULL,
`SNAME` varchar(10) NOT NULL,
`SSEX` char(2) NOT NULL,
`DATASOURCE` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('001', 'KangKang', 'M', 'mysql');
INSERT INTO `student` VALUES ('002', 'Mike', 'M', 'mysql');
================================================
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/resources/oracle_sql.sql
================================================
/*
Navicat Oracle Data Transfer
Oracle Client Version : 11.2.0.1.0
Source Server : localhost_test
Source Server Version : 110200
Source Host : localhost:1521
Source Schema : TEST
Target Server Type : ORACLE
Target Server Version : 110200
File Encoding : 65001
Date: 2018-05-02 14:31:18
*/
-- ----------------------------
-- Table structure for STUDENT
-- ----------------------------
DROP TABLE STUDENT;
CREATE TABLE STUDENT (
SNO VARCHAR2(3 BYTE) NOT NULL ,
SNAME VARCHAR2(9 BYTE) NOT NULL ,
SSEX CHAR(2 BYTE) NOT NULL ,
DATASOURCE VARCHAR2(10 BYTE) NULL
)
LOGGING
NOCOMPRESS
NOCACHE
;
-- ----------------------------
-- Records of STUDENT
-- ----------------------------
INSERT INTO STUDENT VALUES ('001', 'KangKang', 'M ', 'oracle');
INSERT INTO STUDENT VALUES ('002', 'Mike', 'M ', 'oracle');
INSERT INTO STUDENT VALUES ('003', 'Jane', 'F ', 'oracle');
INSERT INTO STUDENT VALUES ('004', 'Maria', 'F ', 'oracle');
-- ----------------------------
-- Checks structure for table STUDENT
-- ----------------------------
ALTER TABLE STUDENT ADD CHECK (SNO IS NOT NULL);
ALTER TABLE STUDENT ADD CHECK (SNAME IS NOT NULL);
ALTER TABLE STUDENT ADD CHECK (SSEX IS NOT NULL);
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-JdbcTemplate-MultiDataSource</artifactId>
<version>1.0-snapshot</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- oracle驱动 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>6.0</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid数据源驱动 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/controller/StudentController.java
================================================
package com.springboot.controller;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.springboot.service.StudentService;
@RestController
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping("querystudentsfromoracle")
public List<Map<String, Object>> queryStudentsFromOracle(){
return this.studentService.getAllStudentsFromOralce();
}
@RequestMapping("querystudentsfrommysql")
public List<Map<String, Object>> queryStudentsFromMysql(){
return this.studentService.getAllStudentsFromMysql();
}
}
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/dao/MysqlStudentDao.java
================================================
package com.springboot.dao;
import java.util.List;
import java.util.Map;
public interface MysqlStudentDao {
List<Map<String, Object>> getAllStudents();
}
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/dao/OracleStudentDao.java
================================================
package com.springboot.dao;
import java.util.List;
import java.util.Map;
public interface OracleStudentDao {
List<Map<String, Object>> getAllStudents();
}
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/dao/impl/MysqlStudentDaoImp.java
================================================
package com.springboot.dao.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import com.springboot.dao.MysqlStudentDao;
@Repository
public class MysqlStudentDaoImp implements MysqlStudentDao{
@Autowired
@Qualifier("mysqlJdbcTemplate")
private JdbcTemplate jdbcTemplate;
@Override
public List<Map<String, Object>> getAllStudents() {
return this.jdbcTemplate.queryForList("select * from student");
}
}
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/dao/impl/OracleStudentDaoImp.java
================================================
package com.springboot.dao.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import com.springboot.dao.OracleStudentDao;
@Repository
public class OracleStudentDaoImp implements OracleStudentDao{
@Autowired
@Qualifier("oracleJdbcTemplate")
private JdbcTemplate jdbcTemplate;
@Override
public List<Map<String, Object>> getAllStudents() {
return this.jdbcTemplate.queryForList("select * from student");
}
}
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/datasource/DataSourceConfig.java
================================================
package com.springboot.datasource;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.core.JdbcTemplate;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "mysqldatasource")
@ConfigurationProperties("spring.datasource.druid.mysql")
public DataSource dataSourceOne(){
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "oracledatasource")
@ConfigurationProperties("spring.datasource.druid.oracle")
public DataSource dataSourceTwo(){
return DruidDataSourceBuilder.create().build();
}
@Bean(name = "mysqlJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate(
@Qualifier("mysqldatasource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "oracleJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(
@Qualifier("oracledatasource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/service/StudentService.java
================================================
package com.springboot.service;
import java.util.List;
import java.util.Map;
public interface StudentService {
List<Map<String, Object>> getAllStudentsFromOralce();
List<Map<String, Object>> getAllStudentsFromMysql();
}
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/service/impl/StudentServiceImp.java
================================================
package com.springboot.service.impl;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.springboot.dao.MysqlStudentDao;
import com.springboot.dao.OracleStudentDao;
import com.springboot.service.StudentService;
@Service("studentService")
public class StudentServiceImp implements StudentService{
@Autowired
private OracleStudentDao oracleStudentDao;
@Autowired
private MysqlStudentDao mysqlStudentDao;
@Override
public List<Map<String, Object>> getAllStudentsFromOralce() {
return this.oracleStudentDao.getAllStudents();
}
@Override
public List<Map<String, Object>> getAllStudentsFromMysql() {
return this.mysqlStudentDao.getAllStudents();
}
}
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/resources/application.yml
================================================
server:
context-path: /web
spring:
datasource:
druid:
# 数据库访问配置, 使用druid数据源
# 数据源1 mysql
mysql:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true&autoReconnect=true&failOverReadOnly=false&zeroDateTimeBehavior=convertToNull
username: root
password: 123456
# 数据源2 oracle
oracle:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:ORCL
username: test
password: 123456
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
# 连接等待超时时间
max-wait: 30000
# 配置检测可以关闭的空闲连接间隔时间
time-between-eviction-runs-millis: 60000
# 配置连接在池中的最小生存时间
min-evictable-idle-time-millis: 300000
validation-query: select '1' from dual
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-open-prepared-statements: 20
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
filters: stat,wall
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
aop-patterns: com.springboot.servie.*
# WebStatFilter配置
web-stat-filter:
enabled: true
# 添加过滤规则
url-pattern: /*
# 忽略过滤的格式
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
# StatViewServlet配置
stat-view-servlet:
enabled: true
# 访问路径为/druid时,跳转到StatViewServlet
url-pattern: /druid/*
# 是否能够重置数据
reset-enable: false
# 需要账号密码才能访问控制台
login-username: druid
login-password: druid123
# IP白名单
# allow: 127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
# deny: 192.168.1.218
# 配置StatFilter
filter:
stat:
log-slow-sql: true
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/resources/mysql_sql.sql
================================================
/*
Navicat MySQL Data Transfer
Source Server : localhost_3306
Source Server Version : 50717
Source Host : localhost:3306
Source Database : test
Target Server Type : MYSQL
Target Server Version : 50717
File Encoding : 65001
Date: 2018-05-02 14:32:22
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`SNO` varchar(3) NOT NULL,
`SNAME` varchar(10) NOT NULL,
`SSEX` char(2) NOT NULL,
`DATASOURCE` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('001', 'KangKang', 'M', 'mysql');
INSERT INTO `student` VALUES ('002', 'Mike', 'M', 'mysql');
================================================
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/resources/oracle_sql.sql
================================================
/*
Navicat Oracle Data Transfer
Oracle Client Version : 11.2.0.1.0
Source Server : localhost_test
Source Server Version : 110200
Source Host : localhost:1521
Source Schema : TEST
Target Server Type : ORACLE
Target Server Version : 110200
File Encoding : 65001
Date: 2018-05-02 14:31:18
*/
-- ----------------------------
-- Table structure for STUDENT
-- ----------------------------
DROP TABLE STUDENT;
CREATE TABLE STUDENT (
SNO VARCHAR2(3 BYTE) NOT NULL ,
SNAME VARCHAR2(9 BYTE) NOT NULL ,
SSEX CHAR(2 BYTE) NOT NULL ,
DATASOURCE VARCHAR2(10 BYTE) NULL
)
LOGGING
NOCOMPRESS
NOCACHE
;
-- ----------------------------
-- Records of STUDENT
-- ----------------------------
INSERT INTO STUDENT VALUES ('001', 'KangKang', 'M ', 'oracle');
INSERT INTO STUDENT VALUES ('002', 'Mike', 'M ', 'oracle');
INSERT INTO STUDENT VALUES ('003', 'Jane', 'F ', 'oracle');
INSERT INTO STUDENT VALUES ('004', 'Maria', 'F ', 'oracle');
-- ----------------------------
-- Checks structure for table STUDENT
-- ----------------------------
ALTER TABLE STUDENT ADD CHECK (SNO IS NOT NULL);
ALTER TABLE STUDENT ADD CHECK (SNAME IS NOT NULL);
ALTER TABLE STUDENT ADD CHECK (SSEX IS NOT NULL);
================================================
FILE: 07.Spring-Boot-AOP-Log/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-AOP-Log</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- aop依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- oracle驱动 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>6.0</version>
</dependency>
<!-- druid数据源驱动 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
================================================
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/annotation/Log.java
================================================
package com.springboot.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Log {
String value() default "";
}
================================================
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/aspect/LogAspect.java
================================================
package com.springboot.aspect;
import java.lang.reflect.Method;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.LocalVariableTableParameterNameDiscoverer;
import org.springframework.stereotype.Component;
import com.springboot.annotation.Log;
import com.springboot.dao.SysLogDao;
import com.springboot.domain.SysLog;
import com.springboot.util.HttpContextUtils;
import com.springboot.util.IPUtils;
@Aspect
@Component
public class LogAspect {
@Autowired
private SysLogDao sysLogDao;
@Pointcut("@annotation(com.springboot.annotation.Log)")
public void pointcut() {
}
@Around("pointcut()")
public void around(ProceedingJoinPoint point) {
long beginTime = System.currentTimeMillis();
try {
// 执行方法
point.proceed();
} catch (Throwable e) {
e.printStackTrace();
}
// 执行时长(毫秒)
long time = System.currentTimeMillis() - beginTime;
// 保存日志
saveLog(point, time);
}
private void saveLog(ProceedingJoinPoint joinPoint, long time) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
SysLog sysLog = new SysLog();
Log logAnnotation = method.getAnnotation(Log.class);
if (logAnnotation != null) {
// 注解上的描述
sysLog.setOperation(logAnnotation.value());
}
// 请求的方法名
String className = joinPoint.getTarget().getClass().getName();
String methodName = signature.getName();
sysLog.setMethod(className + "." + methodName + "()");
// 请求的方法参数值
Object[] args = joinPoint.getArgs();
// 请求的方法参数名称
LocalVariableTableParameterNameDiscoverer u = new LocalVariableTableParameterNameDiscoverer();
String[] paramNames = u.getParameterNames(method);
if (args != null && paramNames != null) {
String params = "";
for (int i = 0; i < args.length; i++) {
params += " " + paramNames[i] + ": " + args[i];
}
sysLog.setParams(params);
}
// 获取request
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
// 设置IP地址
sysLog.setIp(IPUtils.getIpAddr(request));
// 模拟一个用户名
sysLog.setUsername("mrbird");
sysLog.setTime((int) time);
Date date = new Date();
sysLog.setCreateTime(date);
// 保存系统日志
sysLogDao.saveSysLog(sysLog);
}
}
================================================
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/controller/TestController.java
================================================
package com.springboot.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.springboot.annotation.Log;
@RestController
public class TestController {
@Log("执行方法一")
@GetMapping("/one")
public void methodOne(String name) {
}
@Log("执行方法二")
@GetMapping("/two")
public void methodTwo() throws InterruptedException {
Thread.sleep(2000);
}
@Log("执行方法三")
@GetMapping("/three")
public void methodThree(String name, String age) {
}
}
================================================
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/dao/SysLogDao.java
================================================
package com.springboot.dao;
import com.springboot.domain.SysLog;
public interface SysLogDao {
void saveSysLog(SysLog syslog);
}
================================================
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/dao/impl/SysLogDaoImp.java
================================================
package com.springboot.dao.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;
import com.springboot.dao.SysLogDao;
import com.springboot.domain.SysLog;
@Repository
public class SysLogDaoImp implements SysLogDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public void saveSysLog(SysLog syslog) {
StringBuffer sql = new StringBuffer("insert into sys_log ");
sql.append("(id,username,operation,time,method,params,ip,create_time) ");
sql.append("values(seq_sys_log.nextval,:username,:operation,:time,:method,");
sql.append(":params,:ip,:createTime)");
NamedParameterJdbcTemplate npjt = new NamedParameterJdbcTemplate(this.jdbcTemplate.getDataSource());
npjt.update(sql.toString(), new BeanPropertySqlParameterSource(syslog));
}
}
================================================
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/domain/SysLog.java
================================================
package com.springboot.domain;
import java.io.Serializable;
import java.util.Date;
public class SysLog implements Serializable{
private static final long serialVersionUID = -6309732882044872298L;
private Integer id;
private String username;
private String operation;
private Integer time;
private String method;
private String params;
private String ip;
private Date createTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getOperation() {
return operation;
}
public void setOperation(String operation) {
this.operation = operation;
}
public Integer getTime() {
return time;
}
public void setTime(Integer time) {
this.time = time;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getParams() {
return params;
}
public void setParams(String params) {
this.params = params;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
================================================
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/util/HttpContextUtils.java
================================================
package com.springboot.util;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
public class HttpContextUtils {
public static HttpServletRequest getHttpServletRequest() {
return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
}
}
================================================
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/util/IPUtils.java
================================================
package com.springboot.util;
import javax.servlet.http.HttpServletRequest;
public class IPUtils {
/**
* 获取IP地址
*
* 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
* 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
}
}
================================================
FILE: 07.Spring-Boot-AOP-Log/src/main/resources/application.yml
================================================
server:
context-path: /web
spring:
datasource:
druid:
# 数据库访问配置, 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:ORCL
username: test
password: 123456
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
# 连接等待超时时间
max-wait: 30000
# 配置检测可以关闭的空闲连接间隔时间
time-between-eviction-runs-millis: 60000
# 配置连接在池中的最小生存时间
min-evictable-idle-time-millis: 300000
validation-query: select '1' from dual
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-open-prepared-statements: 20
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
filters: stat,wall
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
aop-patterns: com.springboot.servie.*
# WebStatFilter配置
web-stat-filter:
enabled: true
# 添加过滤规则
url-pattern: /*
# 忽略过滤的格式
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
# StatViewServlet配置
stat-view-servlet:
enabled: true
# 访问路径为/druid时,跳转到StatViewServlet
url-pattern: /druid/*
# 是否能够重置数据
reset-enable: false
# 需要账号密码才能访问控制台
login-username: druid
login-password: druid123
# IP白名单
# allow: 127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
# deny: 192.168.1.218
# 配置StatFilter
filter:
stat:
log-slow-sql: true
================================================
FILE: 07.Spring-Boot-AOP-Log/src/main/resources/init.sql
================================================
CREATE TABLE SYS_LOG (
ID NUMBER(20) NOT NULL ,
USERNAME VARCHAR2(50 BYTE) NULL ,
OPERATION VARCHAR2(50 BYTE) NULL ,
TIME NUMBER(11) NULL ,
METHOD VARCHAR2(200 BYTE) NULL ,
PARAMS VARCHAR2(500 BYTE) NULL ,
IP VARCHAR2(64 BYTE) NULL ,
CREATE_TIME DATE NULL
);
COMMENT ON COLUMN SYS_LOG.USERNAME IS '用户名';
COMMENT ON COLUMN SYS_LOG.OPERATION IS '用户操作';
COMMENT ON COLUMN SYS_LOG.TIME IS '响应时间';
COMMENT ON COLUMN SYS_LOG.METHOD IS '请求方法';
COMMENT ON COLUMN SYS_LOG.PARAMS IS '请求参数';
COMMENT ON COLUMN SYS_LOG.IP IS 'IP地址';
COMMENT ON COLUMN SYS_LOG.CREATE_TIME IS '创建时间';
CREATE SEQUENCE seq_sys_log START WITH 1 INCREMENT BY 1;
================================================
FILE: 08.Spring-Boot-Thymeleaf/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-Thymeleaf</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.0.1</thymeleaf-layout-dialect.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 08.Spring-Boot-Thymeleaf/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
================================================
FILE: 08.Spring-Boot-Thymeleaf/src/main/java/com/springboot/bean/Account.java
================================================
package com.springboot.bean;
public class Account {
private String account;
private String name;
private String password;
private String accountType;
private String tel;
public Account(String account, String name, String password, String accountType, String tel) {
super();
this.account = account;
this.name = name;
this.password = password;
this.accountType = accountType;
this.tel = tel;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAccountType() {
return accountType;
}
public void setAccountType(String accountType) {
this.accountType = accountType;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
}
================================================
FILE: 08.Spring-Boot-Thymeleaf/src/main/java/com/springboot/controller/IndexController.java
================================================
package com.springboot.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.springboot.bean.Account;
@Controller
public class IndexController {
@RequestMapping("/account")
public String index(Model m) {
List<Account> list = new ArrayList<Account>();
list.add(new Account("KangKang", "康康", "e10adc3949ba59abbe56e", "超级管理员", "17777777777"));
list.add(new Account("Mike", "麦克", "e10adc3949ba59abbe56e", "管理员", "13444444444"));
list.add(new Account("Jane","简","e10adc3949ba59abbe56e","运维人员","18666666666"));
list.add(new Account("Maria", "玛利亚", "e10adc3949ba59abbe56e", "清算人员", "19999999999"));
m.addAttribute("accountList",list);
return "account";
}
}
================================================
FILE: 08.Spring-Boot-Thymeleaf/src/main/resources/application.properties
================================================
server.context-path=/web
spring.thymeleaf.cache=false
================================================
FILE: 08.Spring-Boot-Thymeleaf/src/main/resources/static/css/style.css
================================================
table {
margin: 20px 40px 20px 0px;
width: 100%;
border-collapse: collapse;
border-spacing: 0;
table-layout: automatic;
word-wrap: break-all
}
table>tbody>tr:nth-of-type(odd) {
background-color: #F7F7F7
}
th, td {
padding: 8px;
text-align: left;
vertical-align: middle;
font-weight: normal;
font-size: 12px;
border-bottom: 1px solid #fff;
}
th {
padding-bottom: 10px;
color: #fff;
font-weight: 700;
background: rgba(66, 185, 131, .9)
}
td {
border-bottom-width: 1px
}
================================================
FILE: 08.Spring-Boot-Thymeleaf/src/main/resources/templates/account.html
================================================
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>account</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" th:href="@{/css/style.css}" type="text/css">
</head>
<body>
<table>
<tr>
<th>no</th>
<th>account</th>
<th>name</th>
<th>password</th>
<th>accountType</th>
<th>tel</th>
</tr>
<tr th:each="list,stat : ${accountList}">
<td th:text="${stat.count}"></td>
<td th:text="${list.account}"></td>
<td th:text="${list.name}"></td>
<td th:text="${list.password}"></td>
<td th:text="${list.accountType}"></td>
<td th:text="${list.tel}"></td>
</tr>
</table>
</body>
</html>
================================================
FILE: 09.Spring-Boot-Redis-Cache/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-Redis-Cache</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- spring-boot redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>6.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
================================================
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/ApplicationTest.java
================================================
package com.springboot;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.springboot.bean.Student;
import com.springboot.service.StudentService;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTest {
@Autowired
private StudentService studentService;
@Test
public void test1() throws Exception {
Student student1 = this.studentService.queryStudentBySno("001");
System.out.println("学号" + student1.getSno() + "的学生姓名为:" + student1.getName());
Student student2 = this.studentService.queryStudentBySno("001");
System.out.println("学号" + student2.getSno() + "的学生姓名为:" + student2.getName());
}
@Test
public void test2() throws Exception {
Student student1 = this.studentService.queryStudentBySno("001");
System.out.println("学号" + student1.getSno() + "的学生姓名为:" + student1.getName());
student1.setName("康康");
this.studentService.update(student1);
Student student2 = this.studentService.queryStudentBySno("001");
System.out.println("学号" + student2.getSno() + "的学生姓名为:" + student2.getName());
}
}
================================================
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/bean/Student.java
================================================
package com.springboot.bean;
import java.io.Serializable;
public class Student implements Serializable{
private static final long serialVersionUID = -339516038496531943L;
private String sno;
private String name;
private String sex;
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
================================================
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/config/RedisConfig.java
================================================
package com.springboot.config;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
// 自定义缓存key生成策略
@Bean
public KeyGenerator keyGenerator() {
return new KeyGenerator() {
@Override
public Object generate(Object target, java.lang.reflect.Method method, Object... params) {
StringBuffer sb = new StringBuffer();
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
// 缓存管理器
@Bean
public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
// 设置缓存过期时间
cacheManager.setDefaultExpiration(10000);
return cacheManager;
}
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
setSerializer(template);// 设置序列化工具
template.afterPropertiesSet();
return template;
}
private void setSerializer(StringRedisTemplate template) {
@SuppressWarnings({ "rawtypes", "unchecked" })
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
}
}
================================================
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/mapper/StudentMapper.java
================================================
package com.springboot.mapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.cache.annotation.CacheConfig;
import com.springboot.bean.Student;
@Mapper
@CacheConfig(cacheNames = "student")
public interface StudentMapper {
@Update("update student set sname=#{name},ssex=#{sex} where sno=#{sno}")
int update(Student student);
@Delete("delete from student where sno=#{sno}")
void deleteStudentBySno(String sno);
@Select("select * from student where sno=#{sno}")
@Results(id = "student", value = { @Result(property = "sno", column = "sno", javaType = String.class),
@Result(property = "name", column = "sname", javaType = String.class),
@Result(property = "sex", column = "ssex", javaType = String.class) })
Student queryStudentBySno(String sno);
}
================================================
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/service/StudentService.java
================================================
package com.springboot.service;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import com.springboot.bean.Student;
@CacheConfig(cacheNames = "student")
public interface StudentService {
@CachePut(key = "#p0.sno")
Student update(Student student);
@CacheEvict(key = "#p0", allEntries = true)
void deleteStudentBySno(String sno);
@Cacheable(key = "#p0")
Student queryStudentBySno(String sno);
}
================================================
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/service/impl/StudentServiceImpl.java
================================================
package com.springboot.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.springboot.bean.Student;
import com.springboot.mapper.StudentMapper;
import com.springboot.service.StudentService;
@Repository("studentService")
public class StudentServiceImpl implements StudentService{
@Autowired
private StudentMapper studentMapper;
@Override
public Student update(Student student) {
this.studentMapper.update(student);
return this.studentMapper.queryStudentBySno(student.getSno());
}
@Override
public void deleteStudentBySno(String sno) {
this.studentMapper.deleteStudentBySno(sno);
}
@Override
public Student queryStudentBySno(String sno) {
return this.studentMapper.queryStudentBySno(sno);
}
}
================================================
FILE: 09.Spring-Boot-Redis-Cache/src/main/resources/application.yml
================================================
server:
context-path: /web
spring:
datasource:
druid:
# 数据库访问配置, 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:ORCL
username: test
password: 123456
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
# 连接等待超时时间
max-wait: 30000
# 配置检测可以关闭的空闲连接间隔时间
time-between-eviction-runs-millis: 60000
# 配置连接在池中的最小生存时间
min-evictable-idle-time-millis: 300000
validation-query: select '1' from dual
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-open-prepared-statements: 20
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
filters: stat,wall
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
aop-patterns: com.springboot.servie.*
# WebStatFilter配置
web-stat-filter:
enabled: true
# 添加过滤规则
url-pattern: /*
# 忽略过滤的格式
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
# StatViewServlet配置
stat-view-servlet:
enabled: true
# 访问路径为/druid时,跳转到StatViewServlet
url-pattern: /druid/*
# 是否能够重置数据
reset-enable: false
# 需要账号密码才能访问控制台
login-username: druid
login-password: druid123
# IP白名单
# allow: 127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
# deny: 192.168.1.218
# 配置StatFilter
filter:
stat:
log-slow-sql: true
redis:
# Redis数据库索引(默认为0)
database: 0
# Redis服务器地址
host: localhost
# Redis服务器连接端口
port: 6379
pool:
# 连接池最大连接数(使用负值表示没有限制)
max-active: 8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1
# 连接池中的最大空闲连接
max-idle: 8
# 连接池中的最小空闲连接
min-idle: 0
# 连接超时时间(毫秒)
timeout: 0
logging:
level:
com:
springboot:
mapper: debug
================================================
FILE: 09.Spring-Boot-Redis-Cache/src/main/resources/init.sql
================================================
CREATE TABLE STUDENT (
SNO VARCHAR2(3 BYTE) NOT NULL ,
SNAME VARCHAR2(9 BYTE) NOT NULL ,
SSEX CHAR(2 BYTE) NOT NULL
);
INSERT INTO STUDENT VALUES ('001', 'KangKang', 'M ');
INSERT INTO STUDENT VALUES ('002', 'Mike', 'M ');
INSERT INTO STUDENT VALUES ('003', 'Jane', 'F ');
================================================
FILE: 10.Spring-Boot-Ehcache-Cache/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-Ehcache-Cache</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- ehcache -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>6.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
================================================
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/ApplicationTest.java
================================================
package com.springboot;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cache.CacheManager;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.springboot.bean.Student;
import com.springboot.service.StudentService;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTest {
@Autowired
private StudentService studentService;
@Test
public void test1() throws Exception {
Student student1 = this.studentService.queryStudentBySno("001");
System.out.println("学号" + student1.getSno() + "的学生姓名为:" + student1.getName());
Student student2 = this.studentService.queryStudentBySno("001");
System.out.println("学号" + student2.getSno() + "的学生姓名为:" + student2.getName());
}
@Test
public void test2() throws Exception {
Student student1 = this.studentService.queryStudentBySno("001");
System.out.println("学号" + student1.getSno() + "的学生姓名为:" + student1.getName());
student1.setName("康康");
this.studentService.update(student1);
Student student2 = this.studentService.queryStudentBySno("001");
System.out.println("学号" + student2.getSno() + "的学生姓名为:" + student2.getName());
}
}
================================================
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/bean/Student.java
================================================
package com.springboot.bean;
import java.io.Serializable;
public class Student implements Serializable{
private static final long serialVersionUID = -339516038496531943L;
private String sno;
private String name;
private String sex;
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
================================================
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/mapper/StudentMapper.java
================================================
package com.springboot.mapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.springboot.bean.Student;
@Mapper
public interface StudentMapper {
@Update("update student set sname=#{name},ssex=#{sex} where sno=#{sno}")
int update(Student student);
@Delete("delete from student where sno=#{sno}")
void deleteStudentBySno(String sno);
@Select("select * from student where sno=#{sno}")
@Results(id = "student", value = { @Result(property = "sno", column = "sno", javaType = String.class),
@Result(property = "name", column = "sname", javaType = String.class),
@Result(property = "sex", column = "ssex", javaType = String.class) })
Student queryStudentBySno(String sno);
}
================================================
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/service/StudentService.java
================================================
package com.springboot.service;
import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.CachePut;
import org.springframework.cache.annotation.Cacheable;
import com.springboot.bean.Student;
@CacheConfig(cacheNames = "student")
public interface StudentService {
@CachePut(key = "#p0.sno")
Student update(Student student);
@CacheEvict(key = "#p0", allEntries = true)
void deleteStudentBySno(String sno);
@Cacheable(key = "#p0")
Student queryStudentBySno(String sno);
}
================================================
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/service/impl/StudentServiceImpl.java
================================================
package com.springboot.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.springboot.bean.Student;
import com.springboot.mapper.StudentMapper;
import com.springboot.service.StudentService;
@Repository("studentService")
public class StudentServiceImpl implements StudentService{
@Autowired
private StudentMapper studentMapper;
@Override
public Student update(Student student) {
this.studentMapper.update(student);
return this.studentMapper.queryStudentBySno(student.getSno());
}
@Override
public void deleteStudentBySno(String sno) {
this.studentMapper.deleteStudentBySno(sno);
}
@Override
public Student queryStudentBySno(String sno) {
return this.studentMapper.queryStudentBySno(sno);
}
}
================================================
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/resources/application.yml
================================================
server:
context-path: /web
spring:
datasource:
druid:
# 数据库访问配置, 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:ORCL
username: test
password: 123456
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
# 连接等待超时时间
max-wait: 30000
# 配置检测可以关闭的空闲连接间隔时间
time-between-eviction-runs-millis: 60000
# 配置连接在池中的最小生存时间
min-evictable-idle-time-millis: 300000
validation-query: select '1' from dual
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-open-prepared-statements: 20
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
filters: stat,wall
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
aop-patterns: com.springboot.servie.*
# WebStatFilter配置
web-stat-filter:
enabled: true
# 添加过滤规则
url-pattern: /*
# 忽略过滤的格式
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
# StatViewServlet配置
stat-view-servlet:
enabled: true
# 访问路径为/druid时,跳转到StatViewServlet
url-pattern: /druid/*
# 是否能够重置数据
reset-enable: false
# 需要账号密码才能访问控制台
login-username: druid
login-password: druid123
# IP白名单
# allow: 127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
# deny: 192.168.1.218
# 配置StatFilter
filter:
stat:
log-slow-sql: true
cache:
ehcache:
config: 'classpath:ehcache.xml'
logging:
level:
com:
springboot:
mapper: debug
================================================
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/resources/ehcache.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd">
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="0"
overflowToDisk="false"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120" />
<cache
name="student"
maxEntriesLocalHeap="2000"
eternal="false"
timeToIdleSeconds="3600"
timeToLiveSeconds="0"
overflowToDisk="false"
statistics="true">
</cache>
</ehcache>
================================================
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/resources/init.sql
================================================
CREATE TABLE STUDENT (
SNO VARCHAR2(3 BYTE) NOT NULL ,
SNAME VARCHAR2(9 BYTE) NOT NULL ,
SSEX CHAR(2 BYTE) NOT NULL
);
INSERT INTO STUDENT VALUES ('001', 'KangKang', 'M ');
INSERT INTO STUDENT VALUES ('002', 'Mike', 'M ');
INSERT INTO STUDENT VALUES ('003', 'Jane', 'F ');
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-Shiro-Authentication</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.0.1</thymeleaf-layout-dialect.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- shiro-spring -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>
<!-- oracle驱动 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>6.0</version>
</dependency>
<!-- druid数据源驱动 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/config/ShiroConfig.java
================================================
package com.springboot.config;
import java.util.LinkedHashMap;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.springboot.shiro.ShiroRealm;
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setSuccessUrl("/index");
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/fonts/**", "anon");
filterChainDefinitionMap.put("/img/**", "anon");
filterChainDefinitionMap.put("/druid/**", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/", "anon");
filterChainDefinitionMap.put("/**", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
@Bean
public SecurityManager securityManager(){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(shiroRealm());
return securityManager;
}
@Bean
public ShiroRealm shiroRealm(){
ShiroRealm shiroRealm = new ShiroRealm();
return shiroRealm;
}
}
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/controller/LoginController.java
================================================
package com.springboot.controller;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.springboot.pojo.ResponseBo;
import com.springboot.pojo.User;
import com.springboot.util.MD5Utils;
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
@ResponseBody
public ResponseBo login(String username, String password) {
password = MD5Utils.encrypt(username, password);
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
Subject subject = SecurityUtils.getSubject();
try {
subject.login(token);
return ResponseBo.ok();
} catch (UnknownAccountException e) {
return ResponseBo.error(e.getMessage());
} catch (IncorrectCredentialsException e) {
return ResponseBo.error(e.getMessage());
} catch (LockedAccountException e) {
return ResponseBo.error(e.getMessage());
} catch (AuthenticationException e) {
return ResponseBo.error("认证失败!");
}
}
@RequestMapping("/")
public String redirectIndex() {
return "redirect:/index";
}
@RequestMapping("/index")
public String index(Model model) {
User user = (User) SecurityUtils.getSubject().getPrincipal();
model.addAttribute("user", user);
return "index";
}
}
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/dao/UserMapper.java
================================================
package com.springboot.dao;
import org.apache.ibatis.annotations.Mapper;
import com.springboot.pojo.User;
@Mapper
public interface UserMapper {
User findByUserName(String userName);
}
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/pojo/ResponseBo.java
================================================
package com.springboot.pojo;
import java.util.HashMap;
import java.util.Map;
public class ResponseBo extends HashMap<String, Object>{
private static final long serialVersionUID = 1L;
public ResponseBo() {
put("code", 0);
put("msg", "操作成功");
}
public static ResponseBo error() {
return error(1, "操作失败");
}
public static ResponseBo error(String msg) {
return error(500, msg);
}
public static ResponseBo error(int code, String msg) {
ResponseBo ResponseBo = new ResponseBo();
ResponseBo.put("code", code);
ResponseBo.put("msg", msg);
return ResponseBo;
}
public static ResponseBo ok(String msg) {
ResponseBo ResponseBo = new ResponseBo();
ResponseBo.put("msg", msg);
return ResponseBo;
}
public static ResponseBo ok(Map<String, Object> map) {
ResponseBo ResponseBo = new ResponseBo();
ResponseBo.putAll(map);
return ResponseBo;
}
public static ResponseBo ok() {
return new ResponseBo();
}
@Override
public ResponseBo put(String key, Object value) {
super.put(key, value);
return this;
}
}
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/pojo/User.java
================================================
package com.springboot.pojo;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable{
private static final long serialVersionUID = -5440372534300871944L;
private Integer id;
private String userName;
private String password;
private Date createTime;
private String status;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/shiro/ShiroRealm.java
================================================
package com.springboot.shiro;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;
import com.springboot.dao.UserMapper;
import com.springboot.pojo.User;
public class ShiroRealm extends AuthorizingRealm {
@Autowired
private UserMapper userMapper;
/**
* 获取用户角色和权限
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principal) {
return null;
}
/**
* 登录认证
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String userName = (String) token.getPrincipal();
String password = new String((char[]) token.getCredentials());
System.out.println("用户" + userName + "认证-----ShiroRealm.doGetAuthenticationInfo");
User user = userMapper.findByUserName(userName);
if (user == null) {
throw new UnknownAccountException("用户名或密码错误!");
}
if (!password.equals(user.getPassword())) {
throw new IncorrectCredentialsException("用户名或密码错误!");
}
if (user.getStatus().equals("0")) {
throw new LockedAccountException("账号已被锁定,请联系管理员!");
}
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password, getName());
return info;
}
}
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/util/MD5Utils.java
================================================
package com.springboot.util;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;
public class MD5Utils {
private static final String SALT = "mrbird";
private static final String ALGORITH_NAME = "md5";
private static final int HASH_ITERATIONS = 2;
public static String encrypt(String pswd) {
String newPassword = new SimpleHash(ALGORITH_NAME, pswd, ByteSource.Util.bytes(SALT), HASH_ITERATIONS).toHex();
return newPassword;
}
public static String encrypt(String username, String pswd) {
String newPassword = new SimpleHash(ALGORITH_NAME, pswd, ByteSource.Util.bytes(username + SALT),
HASH_ITERATIONS).toHex();
return newPassword;
}
public static void main(String[] args) {
System.out.println(MD5Utils.encrypt("test", "123456"));
}
}
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/resources/application.yml
================================================
server:
context-path: /web
spring:
datasource:
druid:
# 数据库访问配置, 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:ORCL
username: test
password: 123456
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
# 连接等待超时时间
max-wait: 30000
# 配置检测可以关闭的空闲连接间隔时间
time-between-eviction-runs-millis: 60000
# 配置连接在池中的最小生存时间
min-evictable-idle-time-millis: 300000
validation-query: select '1' from dual
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-open-prepared-statements: 20
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
filters: stat
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
aop-patterns: com.springboot.servie.*
# WebStatFilter配置
web-stat-filter:
enabled: true
# 添加过滤规则
url-pattern: /*
# 忽略过滤的格式
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
# StatViewServlet配置
stat-view-servlet:
enabled: true
# 访问路径为/druid时,跳转到StatViewServlet
url-pattern: /druid/*
# 是否能够重置数据
reset-enable: false
# 需要账号密码才能访问控制台
login-username: druid
login-password: druid123
# IP白名单
# allow: 127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
# deny: 192.168.1.218
# 配置StatFilter
filter:
stat:
log-slow-sql: true
thymeleaf:
cache: false
mybatis:
# type-aliases扫描路径
type-aliases-package: com.springboot.pojo
# mapper xml实现扫描路径
mapper-locations: classpath:mapper/*.xml
property:
order: BEFORE
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/resources/init.sql
================================================
-- ----------------------------
-- Table structure for T_USER
-- ----------------------------
CREATE TABLE T_USER (
ID NUMBER NOT NULL ,
USERNAME VARCHAR2(20 BYTE) NOT NULL ,
PASSWD VARCHAR2(128 BYTE) NOT NULL ,
CREATE_TIME DATE NULL ,
STATUS CHAR(1 BYTE) NOT NULL
);
COMMENT ON COLUMN T_USER.USERNAME IS '用户名';
COMMENT ON COLUMN T_USER.PASSWD IS '密码';
COMMENT ON COLUMN T_USER.CREATE_TIME IS '创建时间';
COMMENT ON COLUMN T_USER.STATUS IS '是否有效 1:有效 0:锁定';
-- ----------------------------
-- Records of T_USER
-- ----------------------------
INSERT INTO T_USER VALUES ('2', 'test', '7a38c13ec5e9310aed731de58bbc4214', TO_DATE('2017-11-19 17:20:21', 'YYYY-MM-DD HH24:MI:SS'), '0');
INSERT INTO T_USER VALUES ('1', 'mrbird', '42ee25d1e43e9f57119a00d0a39e5250', TO_DATE('2017-11-19 10:52:48', 'YYYY-MM-DD HH24:MI:SS'), '1');
-- ----------------------------
-- Primary Key structure for table T_USER
-- ----------------------------
ALTER TABLE T_USER ADD PRIMARY KEY (ID);
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/resources/mapper/UserMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springboot.dao.UserMapper">
<resultMap type="com.springboot.pojo.User" id="User">
<id column="id" property="id" javaType="java.lang.Integer" jdbcType="NUMERIC"/>
<id column="username" property="userName" javaType="java.lang.String" jdbcType="VARCHAR"/>
<id column="passwd" property="password" javaType="java.lang.String" jdbcType="VARCHAR"/>
<id column="create_time" property="createTime" javaType="java.util.Date" jdbcType="DATE"/>
<id column="status" property="status" javaType="java.lang.String" jdbcType="VARCHAR"/>
</resultMap>
<select id="findByUserName" resultMap="User">
select * from t_user where username = #{userName}
</select>
</mapper>
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/resources/static/css/login.css
================================================
.login-page {
width: 360px;
padding: 8% 0 0;
margin: auto;
}
.form {
position: relative;
z-index: 1;
background: #ffffff;
max-width: 360px;
margin: 0 auto 100px;
padding: 45px;
text-align: center;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
}
.form input {
outline: 0;
background: #f2f2f2;
width: 100%;
border: 0;
margin: 0 0 15px;
padding: 15px;
box-sizing: border-box;
font-size: 14px;
}
.form button {
text-transform: uppercase;
outline: 0;
background: #4caf50;
width: 100%;
border: 0;
padding: 15px;
color: #ffffff;
font-size: 14px;
-webkit-transition: all 0.3 ease;
transition: all 0.3 ease;
cursor: pointer;
}
.form button:hover,
.form button:active,
.form button:focus {
background: #43a047;
}
.form .message {
margin: 15px 0 0;
color: #b3b3b3;
font-size: 12px;
}
.form .message a {
color: #4caf50;
text-decoration: none;
}
.form .register-form {
display: none;
}
.container {
position: relative;
z-index: 1;
max-width: 300px;
margin: 0 auto;
}
.container:before,
.container:after {
content: "";
display: block;
clear: both;
}
.container .info {
margin: 50px auto;
text-align: center;
}
.container .info h1 {
margin: 0 0 15px;
padding: 0;
font-size: 36px;
font-weight: 300;
color: #1a1a1a;
}
.container .info span {
color: #4d4d4d;
font-size: 12px;
}
.container .info span a {
color: #000000;
text-decoration: none;
}
.container .info span .fa {
color: #ef3b3a;
}
body {
background: #76b852; /* fallback for old browsers */
background: -webkit-linear-gradient(right, #76b852, #8dc26f);
background: -moz-linear-gradient(right, #76b852, #8dc26f);
background: -o-linear-gradient(right, #76b852, #8dc26f);
background: linear-gradient(to left, #76b852, #8dc26f);
font-family: Lato,"PingFang SC","Microsoft YaHei",sans-serif;
}
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/resources/templates/index.html
================================================
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<p>你好![[${user.userName}]]</p>
<a th:href="@{/logout}">注销</a>
</body>
</html>
================================================
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/resources/templates/login.html
================================================
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>登录</title>
<link rel="stylesheet" th:href="@{/css/login.css}" type="text/css">
<script th:src="@{/js/jquery-1.11.1.min.js}"></script>
</head>
<body>
<div class="login-page">
<div class="form">
<input type="text" placeholder="用户名" name="username" required="required"/>
<input type="password" placeholder="密码" name="password" required="required"/>
<button onclick="login()">登录</button>
</div>
</div>
</body>
<script th:inline="javascript">
var ctx = [[@{/}]];
function login() {
var username = $("input[name='username']").val();
var password = $("input[name='password']").val();
$.ajax({
type: "post",
url: ctx + "login",
data: {"username": username,"password": password},
dataType: "json",
success: function (r) {
if (r.code == 0) {
location.href = ctx + 'index';
} else {
alert(r.msg);
}
}
});
}
</script>
</html>
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-Shiro-RememberMe</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.0.1</thymeleaf-layout-dialect.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- shiro-spring -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>
<!-- oracle驱动 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>6.0</version>
</dependency>
<!-- druid数据源驱动 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/config/ShiroConfig.java
================================================
package com.springboot.config;
import java.util.LinkedHashMap;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.CookieRememberMeManager;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.springboot.shiro.ShiroRealm;
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setSuccessUrl("/index");
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/fonts/**", "anon");
filterChainDefinitionMap.put("/img/**", "anon");
filterChainDefinitionMap.put("/druid/**", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/", "anon");
filterChainDefinitionMap.put("/**", "user");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
@Bean
public SecurityManager securityManager(){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(shiroRealm());
securityManager.setRememberMeManager(rememberMeManager());
return securityManager;
}
@Bean(name = "lifecycleBeanPostProcessor")
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor();
}
@Bean
public ShiroRealm shiroRealm(){
ShiroRealm shiroRealm = new ShiroRealm();
return shiroRealm;
}
/**
* cookie对象
* @return
*/
public SimpleCookie rememberMeCookie() {
// 设置cookie名称,对应login.html页面的<input type="checkbox" name="rememberMe"/>
SimpleCookie cookie = new SimpleCookie("rememberMe");
// 设置cookie的过期时间,单位为秒,这里为一天
cookie.setMaxAge(86400);
return cookie;
}
/**
* cookie管理对象
* @return
*/
public CookieRememberMeManager rememberMeManager() {
CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
cookieRememberMeManager.setCookie(rememberMeCookie());
// rememberMe cookie加密的密钥
cookieRememberMeManager.setCipherKey(Base64.decode("3AvVhmFLUs0KTA3Kprsdag=="));
return cookieRememberMeManager;
}
}
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/controller/LoginController.java
================================================
package com.springboot.controller;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.springboot.pojo.ResponseBo;
import com.springboot.pojo.User;
import com.springboot.util.MD5Utils;
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
@ResponseBody
public ResponseBo login(String username, String password, Boolean rememberMe) {
password = MD5Utils.encrypt(username, password);
UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
Subject subject = SecurityUtils.getSubject();
try {
subject.login(token);
return ResponseBo.ok();
} catch (UnknownAccountException e) {
return ResponseBo.error(e.getMessage());
} catch (IncorrectCredentialsException e) {
return ResponseBo.error(e.getMessage());
} catch (LockedAccountException e) {
return ResponseBo.error(e.getMessage());
} catch (AuthenticationException e) {
return ResponseBo.error("认证失败!");
}
}
@RequestMapping("/")
public String redirectIndex() {
return "redirect:/index";
}
@RequestMapping("/index")
public String index(Model model) {
User user = (User) SecurityUtils.getSubject().getPrincipal();
model.addAttribute("user", user);
return "index";
}
}
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/dao/UserMapper.java
================================================
package com.springboot.dao;
import org.apache.ibatis.annotations.Mapper;
import com.springboot.pojo.User;
@Mapper
public interface UserMapper {
User findByUserName(String userName);
}
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/pojo/ResponseBo.java
================================================
package com.springboot.pojo;
import java.util.HashMap;
import java.util.Map;
public class ResponseBo extends HashMap<String, Object>{
private static final long serialVersionUID = 1L;
public ResponseBo() {
put("code", 0);
put("msg", "操作成功");
}
public static ResponseBo error() {
return error(1, "操作失败");
}
public static ResponseBo error(String msg) {
return error(500, msg);
}
public static ResponseBo error(int code, String msg) {
ResponseBo ResponseBo = new ResponseBo();
ResponseBo.put("code", code);
ResponseBo.put("msg", msg);
return ResponseBo;
}
public static ResponseBo ok(String msg) {
ResponseBo ResponseBo = new ResponseBo();
ResponseBo.put("msg", msg);
return ResponseBo;
}
public static ResponseBo ok(Map<String, Object> map) {
ResponseBo ResponseBo = new ResponseBo();
ResponseBo.putAll(map);
return ResponseBo;
}
public static ResponseBo ok() {
return new ResponseBo();
}
@Override
public ResponseBo put(String key, Object value) {
super.put(key, value);
return this;
}
}
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/pojo/User.java
================================================
package com.springboot.pojo;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable{
private static final long serialVersionUID = -5440372534300871944L;
private Integer id;
private String userName;
private String password;
private Date createTime;
private String status;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/shiro/ShiroRealm.java
================================================
package com.springboot.shiro;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;
import com.springboot.dao.UserMapper;
import com.springboot.pojo.User;
public class ShiroRealm extends AuthorizingRealm {
@Autowired
private UserMapper userMapper;
/**
* 获取用户角色和权限
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principal) {
return null;
}
/**
* 登录认证
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String userName = (String) token.getPrincipal();
String password = new String((char[]) token.getCredentials());
System.out.println("用户" + userName + "认证-----ShiroRealm.doGetAuthenticationInfo");
User user = userMapper.findByUserName(userName);
if (user == null) {
throw new UnknownAccountException("用户名或密码错误!");
}
if (!password.equals(user.getPassword())) {
throw new IncorrectCredentialsException("用户名或密码错误!");
}
if (user.getStatus().equals("0")) {
throw new LockedAccountException("账号已被锁定,请联系管理员!");
}
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password, getName());
return info;
}
}
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/util/MD5Utils.java
================================================
package com.springboot.util;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;
public class MD5Utils {
private static final String SALT = "mrbird";
private static final String ALGORITH_NAME = "md5";
private static final int HASH_ITERATIONS = 2;
public static String encrypt(String pswd) {
String newPassword = new SimpleHash(ALGORITH_NAME, pswd, ByteSource.Util.bytes(SALT), HASH_ITERATIONS).toHex();
return newPassword;
}
public static String encrypt(String username, String pswd) {
String newPassword = new SimpleHash(ALGORITH_NAME, pswd, ByteSource.Util.bytes(username + SALT),
HASH_ITERATIONS).toHex();
return newPassword;
}
public static void main(String[] args) {
System.out.println(MD5Utils.encrypt("test", "123456"));
}
}
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/resources/application.yml
================================================
server:
context-path: /web
spring:
datasource:
druid:
# 数据库访问配置, 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:ORCL
username: test
password: 123456
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
# 连接等待超时时间
max-wait: 30000
# 配置检测可以关闭的空闲连接间隔时间
time-between-eviction-runs-millis: 60000
# 配置连接在池中的最小生存时间
min-evictable-idle-time-millis: 300000
validation-query: select '1' from dual
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-open-prepared-statements: 20
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
filters: stat
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
aop-patterns: com.springboot.servie.*
# WebStatFilter配置
web-stat-filter:
enabled: true
# 添加过滤规则
url-pattern: /*
# 忽略过滤的格式
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
# StatViewServlet配置
stat-view-servlet:
enabled: true
# 访问路径为/druid时,跳转到StatViewServlet
url-pattern: /druid/*
# 是否能够重置数据
reset-enable: false
# 需要账号密码才能访问控制台
login-username: druid
login-password: druid123
# IP白名单
# allow: 127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
# deny: 192.168.1.218
# 配置StatFilter
filter:
stat:
log-slow-sql: true
thymeleaf:
cache: false
mybatis:
# type-aliases扫描路径
type-aliases-package: com.springboot.pojo
# mapper xml实现扫描路径
mapper-locations: classpath:mapper/*.xml
property:
order: BEFORE
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/resources/init.sql
================================================
-- ----------------------------
-- Table structure for T_USER
-- ----------------------------
CREATE TABLE T_USER (
ID NUMBER NOT NULL ,
USERNAME VARCHAR2(20 BYTE) NOT NULL ,
PASSWD VARCHAR2(128 BYTE) NOT NULL ,
CREATE_TIME DATE NULL ,
STATUS CHAR(1 BYTE) NOT NULL
);
COMMENT ON COLUMN T_USER.USERNAME IS '用户名';
COMMENT ON COLUMN T_USER.PASSWD IS '密码';
COMMENT ON COLUMN T_USER.CREATE_TIME IS '创建时间';
COMMENT ON COLUMN T_USER.STATUS IS '是否有效 1:有效 0:锁定';
-- ----------------------------
-- Records of T_USER
-- ----------------------------
INSERT INTO T_USER VALUES ('2', 'test', '7a38c13ec5e9310aed731de58bbc4214', TO_DATE('2017-11-19 17:20:21', 'YYYY-MM-DD HH24:MI:SS'), '0');
INSERT INTO T_USER VALUES ('1', 'mrbird', '42ee25d1e43e9f57119a00d0a39e5250', TO_DATE('2017-11-19 10:52:48', 'YYYY-MM-DD HH24:MI:SS'), '1');
-- ----------------------------
-- Primary Key structure for table T_USER
-- ----------------------------
ALTER TABLE T_USER ADD PRIMARY KEY (ID);
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/resources/mapper/UserMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springboot.dao.UserMapper">
<resultMap type="com.springboot.pojo.User" id="User">
<id column="id" property="id" javaType="java.lang.Integer" jdbcType="NUMERIC"/>
<id column="username" property="userName" javaType="java.lang.String" jdbcType="VARCHAR"/>
<id column="passwd" property="password" javaType="java.lang.String" jdbcType="VARCHAR"/>
<id column="create_time" property="createTime" javaType="java.util.Date" jdbcType="DATE"/>
<id column="status" property="status" javaType="java.lang.String" jdbcType="VARCHAR"/>
</resultMap>
<select id="findByUserName" resultMap="User">
select * from t_user where username = #{userName}
</select>
</mapper>
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/resources/static/css/login.css
================================================
.login-page {
width: 360px;
padding: 8% 0 0;
margin: auto;
}
.form {
position: relative;
z-index: 1;
background: #ffffff;
max-width: 360px;
margin: 0 auto 100px;
padding: 45px;
text-align: center;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
}
.form input {
outline: 0;
background: #f2f2f2;
width: 100%;
border: 0;
margin: 0 0 15px;
padding: 15px;
box-sizing: border-box;
font-size: 14px;
}
.form button {
text-transform: uppercase;
outline: 0;
background: #4caf50;
width: 100%;
border: 0;
padding: 15px;
color: #ffffff;
font-size: 14px;
-webkit-transition: all 0.3 ease;
transition: all 0.3 ease;
cursor: pointer;
}
.form button:hover,
.form button:active,
.form button:focus {
background: #43a047;
}
.form .message {
margin: 15px 0 0;
color: #b3b3b3;
font-size: 12px;
}
.form .message a {
color: #4caf50;
text-decoration: none;
}
.form .register-form {
display: none;
}
.form p {
text-align: left;
margin: 0;
font-size: 13px;
}
.form p input {
width: auto;
margin-right: 10px;
}
.container {
position: relative;
z-index: 1;
max-width: 300px;
margin: 0 auto;
}
.container:before,
.container:after {
content: "";
display: block;
clear: both;
}
.container .info {
margin: 50px auto;
text-align: center;
}
.container .info h1 {
margin: 0 0 15px;
padding: 0;
font-size: 36px;
font-weight: 300;
color: #1a1a1a;
}
.container .info span {
color: #4d4d4d;
font-size: 12px;
}
.container .info span a {
color: #000000;
text-decoration: none;
}
.container .info span .fa {
color: #ef3b3a;
}
body {
background: #76b852; /* fallback for old browsers */
background: -webkit-linear-gradient(right, #76b852, #8dc26f);
background: -moz-linear-gradient(right, #76b852, #8dc26f);
background: -o-linear-gradient(right, #76b852, #8dc26f);
background: linear-gradient(to left, #76b852, #8dc26f);
font-family: Lato,"PingFang SC","Microsoft YaHei",sans-serif;
}
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/resources/templates/index.html
================================================
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<p>你好![[${user.userName}]]</p>
<a th:href="@{/logout}">注销</a>
</body>
</html>
================================================
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/resources/templates/login.html
================================================
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>登录</title>
<link rel="stylesheet" th:href="@{/css/login.css}" type="text/css">
<script th:src="@{/js/jquery-1.11.1.min.js}"></script>
</head>
<body>
<div class="login-page">
<div class="form">
<input type="text" placeholder="用户名" name="username" required="required"/>
<input type="password" placeholder="密码" name="password" required="required"/>
<p><input type="checkbox" name="rememberMe" />记住我</p>
<button onclick="login()">登录</button>
</div>
</div>
</body>
<script th:inline="javascript">
var ctx = [[@{/}]];
function login() {
var username = $("input[name='username']").val();
var password = $("input[name='password']").val();
var rememberMe =$("input[name='rememberMe']").is(':checked');
$.ajax({
type: "post",
url: ctx + "login",
data: {"username": username,"password": password,"rememberMe": rememberMe},
dataType: "json",
success: function (r) {
if (r.code == 0) {
location.href = ctx + 'index';
} else {
alert(r.msg);
}
}
});
}
</script>
</html>
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-Shiro-Authorization</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.0.1</thymeleaf-layout-dialect.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- shiro-spring -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>
<!-- oracle驱动 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>6.0</version>
</dependency>
<!-- druid数据源驱动 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/config/ShiroConfig.java
================================================
package com.springboot.config;
import java.util.LinkedHashMap;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.CookieRememberMeManager;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import com.springboot.shiro.ShiroRealm;
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setSuccessUrl("/index");
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/fonts/**", "anon");
filterChainDefinitionMap.put("/img/**", "anon");
filterChainDefinitionMap.put("/druid/**", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/", "anon");
filterChainDefinitionMap.put("/**", "user");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
@Bean
public SecurityManager securityManager(){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(shiroRealm());
securityManager.setRememberMeManager(rememberMeManager());
return securityManager;
}
@Bean
public ShiroRealm shiroRealm(){
ShiroRealm shiroRealm = new ShiroRealm();
return shiroRealm;
}
public SimpleCookie rememberMeCookie() {
SimpleCookie cookie = new SimpleCookie("rememberMe");
cookie.setMaxAge(86400);
return cookie;
}
public CookieRememberMeManager rememberMeManager() {
CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
cookieRememberMeManager.setCookie(rememberMeCookie());
cookieRememberMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag=="));
return cookieRememberMeManager;
}
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/controller/LoginController.java
================================================
package com.springboot.controller;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.springboot.pojo.ResponseBo;
import com.springboot.pojo.User;
import com.springboot.util.MD5Utils;
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
@ResponseBody
public ResponseBo login(String username, String password, Boolean rememberMe) {
password = MD5Utils.encrypt(username, password);
UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
Subject subject = SecurityUtils.getSubject();
try {
subject.login(token);
return ResponseBo.ok();
} catch (UnknownAccountException e) {
return ResponseBo.error(e.getMessage());
} catch (IncorrectCredentialsException e) {
return ResponseBo.error(e.getMessage());
} catch (LockedAccountException e) {
return ResponseBo.error(e.getMessage());
} catch (AuthenticationException e) {
return ResponseBo.error("认证失败!");
}
}
@RequestMapping("/")
public String redirectIndex() {
return "redirect:/index";
}
@GetMapping("/403")
public String forbid() {
return "403";
}
@RequestMapping("/index")
public String index(Model model) {
User user = (User) SecurityUtils.getSubject().getPrincipal();
model.addAttribute("user", user);
return "index";
}
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/controller/UserController.java
================================================
package com.springboot.controller;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@RequiresPermissions("user:user")
@RequestMapping("list")
public String userList(Model model) {
model.addAttribute("value", "获取用户信息");
return "user";
}
@RequiresPermissions("user:add")
@RequestMapping("add")
public String userAdd(Model model) {
model.addAttribute("value", "新增用户");
return "user";
}
@RequiresPermissions("user:delete")
@RequestMapping("delete")
public String userDelete(Model model) {
model.addAttribute("value", "删除用户");
return "user";
}
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/dao/UserMapper.java
================================================
package com.springboot.dao;
import org.apache.ibatis.annotations.Mapper;
import com.springboot.pojo.User;
@Mapper
public interface UserMapper {
User findByUserName(String userName);
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/dao/UserPermissionMapper.java
================================================
package com.springboot.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.springboot.pojo.Permission;
@Mapper
public interface UserPermissionMapper {
List<Permission> findByUserName(String userName);
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/dao/UserRoleMapper.java
================================================
package com.springboot.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.springboot.pojo.Role;
@Mapper
public interface UserRoleMapper {
List<Role> findByUserName(String userName);
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/handler/GlobalExceptionHandler.java
================================================
package com.springboot.handler;
import org.apache.shiro.authz.AuthorizationException;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
@Order(value = Ordered.HIGHEST_PRECEDENCE)
public class GlobalExceptionHandler {
@ExceptionHandler(value = AuthorizationException.class)
public String handleAuthorizationException() {
return "403";
}
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/pojo/Permission.java
================================================
package com.springboot.pojo;
import java.io.Serializable;
public class Permission implements Serializable{
private static final long serialVersionUID = 7160557680614732403L;
private Integer id;
private String url;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/pojo/ResponseBo.java
================================================
package com.springboot.pojo;
import java.util.HashMap;
import java.util.Map;
public class ResponseBo extends HashMap<String, Object>{
private static final long serialVersionUID = 1L;
public ResponseBo() {
put("code", 0);
put("msg", "操作成功");
}
public static ResponseBo error() {
return error(1, "操作失败");
}
public static ResponseBo error(String msg) {
return error(500, msg);
}
public static ResponseBo error(int code, String msg) {
ResponseBo ResponseBo = new ResponseBo();
ResponseBo.put("code", code);
ResponseBo.put("msg", msg);
return ResponseBo;
}
public static ResponseBo ok(String msg) {
ResponseBo ResponseBo = new ResponseBo();
ResponseBo.put("msg", msg);
return ResponseBo;
}
public static ResponseBo ok(Map<String, Object> map) {
ResponseBo ResponseBo = new ResponseBo();
ResponseBo.putAll(map);
return ResponseBo;
}
public static ResponseBo ok() {
return new ResponseBo();
}
@Override
public ResponseBo put(String key, Object value) {
super.put(key, value);
return this;
}
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/pojo/Role.java
================================================
package com.springboot.pojo;
import java.io.Serializable;
public class Role implements Serializable{
private static final long serialVersionUID = -227437593919820521L;
private Integer id;
private String name;
private String memo;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/pojo/User.java
================================================
package com.springboot.pojo;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable{
private static final long serialVersionUID = -5440372534300871944L;
private Integer id;
private String userName;
private String password;
private Date createTime;
private String status;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/shiro/ShiroRealm.java
================================================
package com.springboot.shiro;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.SimpleAuthenticationInfo;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.springframework.beans.factory.annotation.Autowired;
import com.springboot.dao.UserMapper;
import com.springboot.dao.UserPermissionMapper;
import com.springboot.dao.UserRoleMapper;
import com.springboot.pojo.Permission;
import com.springboot.pojo.Role;
import com.springboot.pojo.User;
public class ShiroRealm extends AuthorizingRealm {
@Autowired
private UserMapper userMapper;
@Autowired
private UserRoleMapper userRoleMapper;
@Autowired
private UserPermissionMapper userPermissionMapper;
/**
* 获取用户角色和权限
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principal) {
User user = (User) SecurityUtils.getSubject().getPrincipal();
String userName = user.getUserName();
System.out.println("用户" + userName + "获取权限-----ShiroRealm.doGetAuthorizationInfo");
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
// 获取用户角色集
List<Role> roleList = userRoleMapper.findByUserName(userName);
Set<String> roleSet = new HashSet<String>();
for (Role r : roleList) {
roleSet.add(r.getName());
}
simpleAuthorizationInfo.setRoles(roleSet);
// 获取用户权限集
List<Permission> permissionList = userPermissionMapper.findByUserName(userName);
Set<String> permissionSet = new HashSet<String>();
for (Permission p : permissionList) {
permissionSet.add(p.getName());
}
simpleAuthorizationInfo.setStringPermissions(permissionSet);
return simpleAuthorizationInfo;
}
/**
* 登录认证
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String userName = (String) token.getPrincipal();
String password = new String((char[]) token.getCredentials());
System.out.println("用户" + userName + "认证-----ShiroRealm.doGetAuthenticationInfo");
User user = userMapper.findByUserName(userName);
if (user == null) {
throw new UnknownAccountException("用户名或密码错误!");
}
if (!password.equals(user.getPassword())) {
throw new IncorrectCredentialsException("用户名或密码错误!");
}
if (user.getStatus().equals("0")) {
throw new LockedAccountException("账号已被锁定,请联系管理员!");
}
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password, getName());
return info;
}
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/util/MD5Utils.java
================================================
package com.springboot.util;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;
public class MD5Utils {
private static final String SALT = "mrbird";
private static final String ALGORITH_NAME = "md5";
private static final int HASH_ITERATIONS = 2;
public static String encrypt(String pswd) {
String newPassword = new SimpleHash(ALGORITH_NAME, pswd, ByteSource.Util.bytes(SALT), HASH_ITERATIONS).toHex();
return newPassword;
}
public static String encrypt(String username, String pswd) {
String newPassword = new SimpleHash(ALGORITH_NAME, pswd, ByteSource.Util.bytes(username + SALT),
HASH_ITERATIONS).toHex();
return newPassword;
}
public static void main(String[] args) {
System.out.println(MD5Utils.encrypt("tester", "123456"));
}
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/resources/application.yml
================================================
server:
context-path: /web
spring:
datasource:
druid:
# 数据库访问配置, 使用druid数据源
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@localhost:1521:ORCL
username: test
password: 123456
# 连接池配置
initial-size: 5
min-idle: 5
max-active: 20
# 连接等待超时时间
max-wait: 30000
# 配置检测可以关闭的空闲连接间隔时间
time-between-eviction-runs-millis: 60000
# 配置连接在池中的最小生存时间
min-evictable-idle-time-millis: 300000
validation-query: select '1' from dual
test-while-idle: true
test-on-borrow: false
test-on-return: false
# 打开PSCache,并且指定每个连接上PSCache的大小
pool-prepared-statements: true
max-open-prepared-statements: 20
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
filters: stat
# Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
aop-patterns: com.springboot.servie.*
# WebStatFilter配置
web-stat-filter:
enabled: true
# 添加过滤规则
url-pattern: /*
# 忽略过滤的格式
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
# StatViewServlet配置
stat-view-servlet:
enabled: true
# 访问路径为/druid时,跳转到StatViewServlet
url-pattern: /druid/*
# 是否能够重置数据
reset-enable: false
# 需要账号密码才能访问控制台
login-username: druid
login-password: druid123
# IP白名单
# allow: 127.0.0.1
# IP黑名单(共同存在时,deny优先于allow)
# deny: 192.168.1.218
# 配置StatFilter
filter:
stat:
log-slow-sql: true
thymeleaf:
cache: false
mybatis:
# type-aliases扫描路径
type-aliases-package: com.springboot.pojo
# mapper xml实现扫描路径
mapper-locations: classpath:mapper/*.xml
property:
order: BEFORE
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/resources/init.sql
================================================
-- ----------------------------
-- Table structure for T_PERMISSION
-- ----------------------------
CREATE TABLE T_PERMISSION (
ID NUMBER(10) NOT NULL ,
URL VARCHAR2(256 BYTE) NULL ,
NAME VARCHAR2(64 BYTE) NULL
);
COMMENT ON COLUMN T_PERMISSION.URL IS 'url地址';
COMMENT ON COLUMN T_PERMISSION.NAME IS 'url描述';
-- ----------------------------
-- Records of T_PERMISSION
-- ----------------------------
INSERT INTO T_PERMISSION VALUES ('1', '/user', 'user:user');
INSERT INTO T_PERMISSION VALUES ('2', '/user/add', 'user:add');
INSERT INTO T_PERMISSION VALUES ('3', '/user/delete', 'user:delete');
-- ----------------------------
-- Table structure for T_ROLE
-- ----------------------------
CREATE TABLE T_ROLE (
ID NUMBER NOT NULL ,
NAME VARCHAR2(32 BYTE) NULL ,
MEMO VARCHAR2(32 BYTE) NULL
);
COMMENT ON COLUMN T_ROLE.NAME IS '角色名称';
COMMENT ON COLUMN T_ROLE.MEMO IS '角色描述';
-- ----------------------------
-- Records of T_ROLE
-- ----------------------------
INSERT INTO T_ROLE VALUES ('1', 'admin', '超级管理员');
INSERT INTO T_ROLE VALUES ('2', 'test', '测试账户');
-- ----------------------------
-- Table structure for T_ROLE_PERMISSION
-- ----------------------------
CREATE TABLE T_ROLE_PERMISSION (
RID NUMBER(10) NULL ,
PID NUMBER(10) NULL
);
COMMENT ON COLUMN T_ROLE_PERMISSION.RID IS '角色id';
COMMENT ON COLUMN T_ROLE_PERMISSION.PID IS '权限id';
-- ----------------------------
-- Records of T_ROLE_PERMISSION
-- ----------------------------
INSERT INTO T_ROLE_PERMISSION VALUES ('1', '2');
INSERT INTO T_ROLE_PERMISSION VALUES ('1', '3');
INSERT INTO T_ROLE_PERMISSION VALUES ('2', '1');
INSERT INTO T_ROLE_PERMISSION VALUES ('1', '1');
-- ----------------------------
-- Table structure for T_USER
-- ----------------------------
CREATE TABLE T_USER (
ID NUMBER NOT NULL ,
USERNAME VARCHAR2(20 BYTE) NOT NULL ,
PASSWD VARCHAR2(128 BYTE) NOT NULL ,
CREATE_TIME DATE NULL ,
STATUS CHAR(1 BYTE) NOT NULL
);
COMMENT ON COLUMN T_USER.USERNAME IS '用户名';
COMMENT ON COLUMN T_USER.PASSWD IS '密码';
COMMENT ON COLUMN T_USER.CREATE_TIME IS '创建时间';
COMMENT ON COLUMN T_USER.STATUS IS '是否有效 1:有效 0:锁定';
-- ----------------------------
-- Records of T_USER
-- ----------------------------
INSERT INTO T_USER VALUES ('2', 'tester', '243e29429b340192700677d48c09d992', TO_DATE('2017-12-11 17:20:21', 'YYYY-MM-DD HH24:MI:SS'), '1');
INSERT INTO T_USER VALUES ('1', 'mrbird', '42ee25d1e43e9f57119a00d0a39e5250', TO_DATE('2017-12-11 10:52:48', 'YYYY-MM-DD HH24:MI:SS'), '1');
-- ----------------------------
-- Table structure for T_USER_ROLE
-- ----------------------------
CREATE TABLE T_USER_ROLE (
USER_ID NUMBER(10) NULL ,
RID NUMBER(10) NULL
);
COMMENT ON COLUMN T_USER_ROLE.USER_ID IS '用户id';
COMMENT ON COLUMN T_USER_ROLE.RID IS '角色id';
-- ----------------------------
-- Records of T_USER_ROLE
-- ----------------------------
INSERT INTO T_USER_ROLE VALUES ('1', '1');
INSERT INTO T_USER_ROLE VALUES ('2', '2');
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/resources/mapper/UserMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springboot.dao.UserMapper">
<resultMap type="com.springboot.pojo.User" id="User">
<id column="id" property="id" javaType="java.lang.Integer" jdbcType="NUMERIC"/>
<id column="username" property="userName" javaType="java.lang.String" jdbcType="VARCHAR"/>
<id column="passwd" property="password" javaType="java.lang.String" jdbcType="VARCHAR"/>
<id column="create_time" property="createTime" javaType="java.util.Date" jdbcType="DATE"/>
<id column="status" property="status" javaType="java.lang.String" jdbcType="VARCHAR"/>
</resultMap>
<select id="findByUserName" resultMap="User">
select * from t_user where username = #{userName}
</select>
</mapper>
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/resources/mapper/UserPermissionMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springboot.dao.UserPermissionMapper">
<resultMap type="com.springboot.pojo.Permission" id="permission">
<id column="id" property="id" javaType="java.lang.Integer" jdbcType="NUMERIC"/>
<id column="url" property="url" javaType="java.lang.String" jdbcType="VARCHAR"/>
<id column="name" property="name" javaType="java.lang.String" jdbcType="VARCHAR"/>
</resultMap>
<select id="findByUserName" resultMap="permission">
select p.id,p.url,p.name from t_role r
left join t_user_role ur on(r.id = ur.rid)
left join t_user u on(u.id = ur.user_id)
left join t_role_permission rp on(rp.rid = r.id)
left join t_permission p on(p.id = rp.pid )
where u.username = #{userName}
</select>
</mapper>
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/resources/mapper/UserRoleMapper.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.springboot.dao.UserRoleMapper">
<resultMap type="com.springboot.pojo.Role" id="role">
<id column="id" property="id" javaType="java.lang.Integer" jdbcType="NUMERIC"/>
<id column="name" property="name" javaType="java.lang.String" jdbcType="VARCHAR"/>
<id column="memo" property="memo" javaType="java.lang.String" jdbcType="VARCHAR"/>
</resultMap>
<select id="findByUserName" resultMap="role">
select r.id,r.name,r.memo from t_role r
left join t_user_role ur on(r.id = ur.rid)
left join t_user u on(u.id = ur.user_id)
where u.username = #{userName}
</select>
</mapper>
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/resources/static/css/login.css
================================================
.login-page {
width: 360px;
padding: 8% 0 0;
margin: auto;
}
.form {
position: relative;
z-index: 1;
background: #ffffff;
max-width: 360px;
margin: 0 auto 100px;
padding: 45px;
text-align: center;
box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.2), 0 5px 5px 0 rgba(0, 0, 0, 0.24);
}
.form input {
outline: 0;
background: #f2f2f2;
width: 100%;
border: 0;
margin: 0 0 15px;
padding: 15px;
box-sizing: border-box;
font-size: 14px;
}
.form button {
text-transform: uppercase;
outline: 0;
background: #4caf50;
width: 100%;
border: 0;
padding: 15px;
color: #ffffff;
font-size: 14px;
-webkit-transition: all 0.3 ease;
transition: all 0.3 ease;
cursor: pointer;
}
.form button:hover,
.form button:active,
.form button:focus {
background: #43a047;
}
.form .message {
margin: 15px 0 0;
color: #b3b3b3;
font-size: 12px;
}
.form .message a {
color: #4caf50;
text-decoration: none;
}
.form .register-form {
display: none;
}
.form p {
text-align: left;
margin: 0;
font-size: 13px;
}
.form p input {
width: auto;
margin-right: 10px;
}
.container {
position: relative;
z-index: 1;
max-width: 300px;
margin: 0 auto;
}
.container:before,
.container:after {
content: "";
display: block;
clear: both;
}
.container .info {
margin: 50px auto;
text-align: center;
}
.container .info h1 {
margin: 0 0 15px;
padding: 0;
font-size: 36px;
font-weight: 300;
color: #1a1a1a;
}
.container .info span {
color: #4d4d4d;
font-size: 12px;
}
.container .info span a {
color: #000000;
text-decoration: none;
}
.container .info span .fa {
color: #ef3b3a;
}
body {
background: #76b852; /* fallback for old browsers */
background: -webkit-linear-gradient(right, #76b852, #8dc26f);
background: -moz-linear-gradient(right, #76b852, #8dc26f);
background: -o-linear-gradient(right, #76b852, #8dc26f);
background: linear-gradient(to left, #76b852, #8dc26f);
font-family: Lato,"PingFang SC","Microsoft YaHei",sans-serif;
}
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/resources/templates/403.html
================================================
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>暂无权限</title>
</head>
<body>
<p>您没有权限访问该资源!!</p>
<a th:href="@{/index}">返回</a>
</body>
</html>
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/resources/templates/index.html
================================================
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<style>
div {
border: 1px dashed #ddd;
padding: 10px;
margin: 10px 10px 10px 0px;
}
</style>
<body>
<p>你好![[${user.userName}]]</p>
<h3>权限测试链接</h3>
<div>
<a th:href="@{/user/list}">获取用户信息</a>
<a th:href="@{/user/add}">新增用户</a>
<a th:href="@{/user/delete}">删除用户</a>
</div>
<a th:href="@{/logout}">注销</a>
</body>
</html>
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/resources/templates/login.html
================================================
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>登录</title>
<link rel="stylesheet" th:href="@{/css/login.css}" type="text/css">
<script th:src="@{/js/jquery-1.11.1.min.js}"></script>
</head>
<body>
<div class="login-page">
<div class="form">
<input type="text" placeholder="用户名" name="username" required="required"/>
<input type="password" placeholder="密码" name="password" required="required"/>
<p><input type="checkbox" name="rememberMe" />记住我</p>
<button onclick="login()">登录</button>
</div>
</div>
</body>
<script th:inline="javascript">
var ctx = [[@{/}]];
function login() {
var username = $("input[name='username']").val();
var password = $("input[name='password']").val();
var rememberMe =$("input[name='rememberMe']").is(':checked');
$.ajax({
type: "post",
url: ctx + "login",
data: {"username": username,"password": password,"rememberMe": rememberMe},
dataType: "json",
success: function (r) {
if (r.code == 0) {
location.href = ctx + 'index';
} else {
alert(r.msg);
}
}
});
}
</script>
</html>
================================================
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/resources/templates/user.html
================================================
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>[[${value}]]</title>
</head>
<body>
<p>[[${value}]]</p>
<a th:href="@{/index}">返回</a>
</body>
</html>
================================================
FILE: 14.Spring-Boot-Shiro-Redis/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springboot</groupId>
<artifactId>Spring-Boot-Shiro-Redis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.7</java.version>
<thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.0.1</thymeleaf-layout-dialect.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- shiro-spring -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.4.0</version>
</dependency>
<!-- shiro-redis -->
<dependency>
<groupId>org.crazycake</groupId>
<artifactId>shiro-redis</artifactId>
<version>2.4.2.1-RELEASE</version>
</dependency>
<!-- oracle驱动 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>6.0</version>
</dependency>
<!-- druid数据源驱动 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/Application.java
================================================
package com.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/config/ShiroConfig.java
================================================
package com.springboot.config;
import java.util.LinkedHashMap;
import org.apache.shiro.codec.Base64;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.spring.LifecycleBeanPostProcessor;
import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.mgt.CookieRememberMeManager;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.apache.shiro.web.servlet.SimpleCookie;
import org.crazycake.shiro.RedisCacheManager;
import org.crazycake.shiro.RedisManager;
import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import com.springboot.shiro.ShiroRealm;
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
shiroFilterFactoryBean.setLoginUrl("/login");
shiroFilterFactoryBean.setSuccessUrl("/index");
shiroFilterFactoryBean.setUnauthorizedUrl("/403");
LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/css/**", "anon");
filterChainDefinitionMap.put("/js/**", "anon");
filterChainDefinitionMap.put("/fonts/**", "anon");
filterChainDefinitionMap.put("/img/**", "anon");
filterChainDefinitionMap.put("/druid/**", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/", "anon");
filterChainDefinitionMap.put("/**", "user");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
@Bean
public SecurityManager securityManager(){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(shiroRealm());
securityManager.setRememberMeManager(rememberMeManager());
securityManager.setCacheManager(cacheManager());
return securityManager;
}
@Bean(name = "lifecycleBeanPostProcessor")
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor();
}
@Bean
public ShiroRealm shiroRealm(){
ShiroRealm shiroRealm = new ShiroRealm();
return shiroRealm;
}
public SimpleCookie rememberMeCookie() {
SimpleCookie cookie = new SimpleCookie("rememberMe");
cookie.setMaxAge(86400);
return cookie;
}
public CookieRememberMeManager rememberMeManager() {
CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
cookieRememberMeManager.setCookie(rememberMeCookie());
cookieRememberMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag=="));
return cookieRememberMeManager;
}
@Bean
@DependsOn({"lifecycleBeanPostProcessor"})
public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {
DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
advisorAutoProxyCreator.setProxyTargetClass(true);
return advisorAutoProxyCreator;
}
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}
public RedisManager redisManager() {
RedisManager redisManager = new RedisManager();
return redisManager;
}
public RedisCacheManager cacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager();
redisCacheManager.setRedisManager(redisManager());
return redisCacheManager;
}
}
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/controller/LoginController.java
================================================
package com.springboot.controller;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.LockedAccountException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.springboot.pojo.ResponseBo;
import com.springboot.pojo.User;
import com.springboot.util.MD5Utils;
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
@PostMapping("/login")
@ResponseBody
public ResponseBo login(String username, String password, Boolean rememberMe) {
password = MD5Utils.encrypt(username, password);
UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
Subject subject = SecurityUtils.getSubject();
try {
subject.login(token);
return ResponseBo.ok();
} catch (UnknownAccountException e) {
return ResponseBo.error(e.getMessage());
} catch (IncorrectCredentialsException e) {
return ResponseBo.error(e.getMessage());
} catch (LockedAccountException e) {
return ResponseBo.error(e.getMessage());
} catch (AuthenticationException e) {
return ResponseBo.error("认证失败!");
}
}
@RequestMapping("/")
public String redirectIndex() {
return "redirect:/index";
}
@GetMapping("/403")
public String forbid() {
return "403";
}
@RequestMapping("/index")
public String index(Model model) {
User user = (User) SecurityUtils.getSubject().getPrincipal();
model.addAttribute("user", user);
return "index";
}
}
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/controller/UserController.java
================================================
package com.springboot.controller;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class UserController {
@RequiresPermissions("user:user")
@RequestMapping("list")
public String userList(Model model) {
model.addAttribute("value", "获取用户信息");
return "user";
}
@RequiresPermissions("user:add")
@RequestMapping("add")
public String userAdd(Model model) {
model.addAttribute("value", "新增用户");
return "user";
}
@RequiresPermissions("user:delete")
@RequestMapping("delete")
public String userDelete(Model model) {
model.addAttribute("value", "删除用户");
return "user";
}
}
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/dao/UserMapper.java
================================================
package com.springboot.dao;
import org.apache.ibatis.annotations.Mapper;
import com.springboot.pojo.User;
@Mapper
public interface UserMapper {
User findByUserName(String userName);
}
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/dao/UserPermissionMapper.java
================================================
package com.springboot.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.springboot.pojo.Permission;
@Mapper
public interface UserPermissionMapper {
List<Permission> findByUserName(String userName);
}
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/dao/UserRoleMapper.java
================================================
package com.springboot.dao;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.springboot.pojo.Role;
@Mapper
public interface UserRoleMapper {
List<Role> findByUserName(String userName);
}
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/handler/GlobalExceptionHandler.java
================================================
package com.springboot.handler;
import org.apache.shiro.authz.AuthorizationException;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
@Order(value = Ordered.HIGHEST_PRECEDENCE)
public class GlobalExceptionHandler {
@ExceptionHandler(value = AuthorizationException.class)
public String handleAuthorizationException() {
return "403";
}
}
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/pojo/Permission.java
================================================
package com.springboot.pojo;
import java.io.Serializable;
public class Permission implements Serializable{
private static final long serialVersionUID = 7160557680614732403L;
private Integer id;
private String url;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/pojo/ResponseBo.java
================================================
package com.springboot.pojo;
import java.util.HashMap;
import java.util.Map;
public class ResponseBo extends HashMap<String, Object>{
private static final long serialVersionUID = 1L;
public ResponseBo() {
put("code", 0);
put("msg", "操作成功");
}
public static ResponseBo error() {
return error(1, "操作失败");
}
public static ResponseBo error(String msg) {
return error(500, msg);
}
public static ResponseBo error(int code, String msg) {
ResponseBo ResponseBo = new ResponseBo();
ResponseBo.put("code", code);
ResponseBo.put("msg", msg);
return ResponseBo;
}
public static ResponseBo ok(String msg) {
ResponseBo ResponseBo = new ResponseBo();
ResponseBo.put("msg", msg);
return ResponseBo;
}
public static ResponseBo ok(Map<String, Object> map) {
ResponseBo ResponseBo = new ResponseBo();
ResponseBo.putAll(map);
return ResponseBo;
}
public static ResponseBo ok() {
return new ResponseBo();
}
@Override
public ResponseBo put(String key, Object value) {
super.put(key, value);
return this;
}
}
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/pojo/Role.java
================================================
package com.springboot.pojo;
import java.io.Serializable;
public class Role implements Serializable{
private static final long serialVersionUID = -227437593919820521L;
private Integer id;
private String name;
private String memo;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
}
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/pojo/User.java
================================================
package com.springboot.pojo;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable{
private static final long serialVersionUID = -5440372534300871944L;
private Integer id;
private String userName;
private String password;
private Date createTime;
private String status;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
}
================================================
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/shiro/ShiroRealm.java
================================================
package com.springboot.shiro;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.
gitextract_zh464p81/ ├── .gitignore ├── 01.Start-Spring-Boot/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── springboot/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/ │ └── springboot/ │ └── demo/ │ └── DemoApplicationTests.java ├── 02.Spring-Boot-Config/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── springboot/ │ │ │ ├── Application.java │ │ │ ├── bean/ │ │ │ │ ├── BlogProperties.java │ │ │ │ ├── ConfigBean.java │ │ │ │ └── TestConfigBean.java │ │ │ └── controller/ │ │ │ └── IndexController.java │ │ └── resources/ │ │ ├── application-dev.properties │ │ ├── application-prod.properties │ │ ├── application.properties │ │ ├── banner.txt │ │ └── test.properties │ └── test/ │ └── java/ │ └── com/ │ └── springboot/ │ └── demo/ │ └── DemoApplicationTests.java ├── 03.Spring-Boot-MyBatis/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── bean/ │ │ │ └── Student.java │ │ ├── controller/ │ │ │ └── TestController.java │ │ ├── mapper/ │ │ │ └── StudentMapper.java │ │ └── service/ │ │ ├── StudentService.java │ │ └── impl/ │ │ └── StudentServiceImp.java │ └── resources/ │ ├── application.yml │ └── init.sql ├── 04.Spring-Boot-JdbcTemplate/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── bean/ │ │ │ └── Student.java │ │ ├── controller/ │ │ │ └── TestController.java │ │ ├── dao/ │ │ │ ├── StudentDao.java │ │ │ └── impl/ │ │ │ └── StudentDaoImp.java │ │ ├── mapper/ │ │ │ └── StudentMapper.java │ │ └── service/ │ │ ├── StudentService.java │ │ └── impl/ │ │ └── StudentServiceImp.java │ └── resources/ │ ├── application.yml │ └── init.sql ├── 05.Spring-Boot-MyBatis-MultiDataSource/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ └── StudentController.java │ │ ├── datasource/ │ │ │ ├── MysqlDatasourceConfig.java │ │ │ └── OracleDatasourceConfig.java │ │ ├── mysqldao/ │ │ │ └── MysqlStudentMapper.java │ │ ├── oracledao/ │ │ │ └── OracleStudentMapper.java │ │ └── service/ │ │ ├── StudentService.java │ │ └── impl/ │ │ └── StudentServiceImp.java │ └── resources/ │ ├── application.yml │ ├── mapper/ │ │ ├── mysql/ │ │ │ └── MysqlStudentMapper.xml │ │ └── oracle/ │ │ └── OracleStudentMapper.xml │ ├── mysql_sql.sql │ └── oracle_sql.sql ├── 06.Spring-Boot-JdbcTemplate-MultiDataSource/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── controller/ │ │ │ └── StudentController.java │ │ ├── dao/ │ │ │ ├── MysqlStudentDao.java │ │ │ ├── OracleStudentDao.java │ │ │ └── impl/ │ │ │ ├── MysqlStudentDaoImp.java │ │ │ └── OracleStudentDaoImp.java │ │ ├── datasource/ │ │ │ └── DataSourceConfig.java │ │ └── service/ │ │ ├── StudentService.java │ │ └── impl/ │ │ └── StudentServiceImp.java │ └── resources/ │ ├── application.yml │ ├── mysql_sql.sql │ └── oracle_sql.sql ├── 07.Spring-Boot-AOP-Log/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── annotation/ │ │ │ └── Log.java │ │ ├── aspect/ │ │ │ └── LogAspect.java │ │ ├── controller/ │ │ │ └── TestController.java │ │ ├── dao/ │ │ │ ├── SysLogDao.java │ │ │ └── impl/ │ │ │ └── SysLogDaoImp.java │ │ ├── domain/ │ │ │ └── SysLog.java │ │ └── util/ │ │ ├── HttpContextUtils.java │ │ └── IPUtils.java │ └── resources/ │ ├── application.yml │ └── init.sql ├── 08.Spring-Boot-Thymeleaf/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── bean/ │ │ │ └── Account.java │ │ └── controller/ │ │ └── IndexController.java │ └── resources/ │ ├── application.properties │ ├── static/ │ │ └── css/ │ │ └── style.css │ └── templates/ │ └── account.html ├── 09.Spring-Boot-Redis-Cache/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── ApplicationTest.java │ │ ├── bean/ │ │ │ └── Student.java │ │ ├── config/ │ │ │ └── RedisConfig.java │ │ ├── mapper/ │ │ │ └── StudentMapper.java │ │ └── service/ │ │ ├── StudentService.java │ │ └── impl/ │ │ └── StudentServiceImpl.java │ └── resources/ │ ├── application.yml │ └── init.sql ├── 10.Spring-Boot-Ehcache-Cache/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── ApplicationTest.java │ │ ├── bean/ │ │ │ └── Student.java │ │ ├── mapper/ │ │ │ └── StudentMapper.java │ │ └── service/ │ │ ├── StudentService.java │ │ └── impl/ │ │ └── StudentServiceImpl.java │ └── resources/ │ ├── application.yml │ ├── ehcache.xml │ └── init.sql ├── 11.Spring-Boot-Shiro-Authentication/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── ShiroConfig.java │ │ ├── controller/ │ │ │ └── LoginController.java │ │ ├── dao/ │ │ │ └── UserMapper.java │ │ ├── pojo/ │ │ │ ├── ResponseBo.java │ │ │ └── User.java │ │ ├── shiro/ │ │ │ └── ShiroRealm.java │ │ └── util/ │ │ └── MD5Utils.java │ └── resources/ │ ├── application.yml │ ├── init.sql │ ├── mapper/ │ │ └── UserMapper.xml │ ├── static/ │ │ └── css/ │ │ └── login.css │ └── templates/ │ ├── index.html │ └── login.html ├── 12.Spring-Boot-Shiro-RememberMe/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── ShiroConfig.java │ │ ├── controller/ │ │ │ └── LoginController.java │ │ ├── dao/ │ │ │ └── UserMapper.java │ │ ├── pojo/ │ │ │ ├── ResponseBo.java │ │ │ └── User.java │ │ ├── shiro/ │ │ │ └── ShiroRealm.java │ │ └── util/ │ │ └── MD5Utils.java │ └── resources/ │ ├── application.yml │ ├── init.sql │ ├── mapper/ │ │ └── UserMapper.xml │ ├── static/ │ │ └── css/ │ │ └── login.css │ └── templates/ │ ├── index.html │ └── login.html ├── 13.Spring-Boot-Shiro-Authorization/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── ShiroConfig.java │ │ ├── controller/ │ │ │ ├── LoginController.java │ │ │ └── UserController.java │ │ ├── dao/ │ │ │ ├── UserMapper.java │ │ │ ├── UserPermissionMapper.java │ │ │ └── UserRoleMapper.java │ │ ├── handler/ │ │ │ └── GlobalExceptionHandler.java │ │ ├── pojo/ │ │ │ ├── Permission.java │ │ │ ├── ResponseBo.java │ │ │ ├── Role.java │ │ │ └── User.java │ │ ├── shiro/ │ │ │ └── ShiroRealm.java │ │ └── util/ │ │ └── MD5Utils.java │ └── resources/ │ ├── application.yml │ ├── init.sql │ ├── mapper/ │ │ ├── UserMapper.xml │ │ ├── UserPermissionMapper.xml │ │ └── UserRoleMapper.xml │ ├── static/ │ │ └── css/ │ │ └── login.css │ └── templates/ │ ├── 403.html │ ├── index.html │ ├── login.html │ └── user.html ├── 14.Spring-Boot-Shiro-Redis/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── ShiroConfig.java │ │ ├── controller/ │ │ │ ├── LoginController.java │ │ │ └── UserController.java │ │ ├── dao/ │ │ │ ├── UserMapper.java │ │ │ ├── UserPermissionMapper.java │ │ │ └── UserRoleMapper.java │ │ ├── handler/ │ │ │ └── GlobalExceptionHandler.java │ │ ├── pojo/ │ │ │ ├── Permission.java │ │ │ ├── ResponseBo.java │ │ │ ├── Role.java │ │ │ └── User.java │ │ ├── shiro/ │ │ │ └── ShiroRealm.java │ │ └── util/ │ │ └── MD5Utils.java │ └── resources/ │ ├── application.yml │ ├── init.sql │ ├── mapper/ │ │ ├── UserMapper.xml │ │ ├── UserPermissionMapper.xml │ │ └── UserRoleMapper.xml │ ├── static/ │ │ └── css/ │ │ └── login.css │ └── templates/ │ ├── 403.html │ ├── index.html │ ├── login.html │ └── user.html ├── 15.Spring-Boot-Shiro-Ehcache/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── ShiroConfig.java │ │ ├── controller/ │ │ │ ├── LoginController.java │ │ │ └── UserController.java │ │ ├── dao/ │ │ │ ├── UserMapper.java │ │ │ ├── UserPermissionMapper.java │ │ │ └── UserRoleMapper.java │ │ ├── handler/ │ │ │ └── GlobalExceptionHandler.java │ │ ├── pojo/ │ │ │ ├── Permission.java │ │ │ ├── ResponseBo.java │ │ │ ├── Role.java │ │ │ └── User.java │ │ ├── shiro/ │ │ │ └── ShiroRealm.java │ │ └── util/ │ │ └── MD5Utils.java │ └── resources/ │ ├── application.yml │ ├── config/ │ │ └── shiro-ehcache.xml │ ├── init.sql │ ├── mapper/ │ │ ├── UserMapper.xml │ │ ├── UserPermissionMapper.xml │ │ └── UserRoleMapper.xml │ ├── static/ │ │ └── css/ │ │ └── login.css │ └── templates/ │ ├── 403.html │ ├── index.html │ ├── login.html │ └── user.html ├── 16.Spring-Boot-Shiro-Thymeleaf-Tag/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── ShiroConfig.java │ │ ├── controller/ │ │ │ ├── LoginController.java │ │ │ └── UserController.java │ │ ├── dao/ │ │ │ ├── UserMapper.java │ │ │ ├── UserPermissionMapper.java │ │ │ └── UserRoleMapper.java │ │ ├── handler/ │ │ │ └── GlobalExceptionHandler.java │ │ ├── pojo/ │ │ │ ├── Permission.java │ │ │ ├── ResponseBo.java │ │ │ ├── Role.java │ │ │ └── User.java │ │ ├── shiro/ │ │ │ └── ShiroRealm.java │ │ └── util/ │ │ └── MD5Utils.java │ └── resources/ │ ├── application.yml │ ├── config/ │ │ └── shiro-ehcache.xml │ ├── init.sql │ ├── mapper/ │ │ ├── UserMapper.xml │ │ ├── UserPermissionMapper.xml │ │ └── UserRoleMapper.xml │ ├── static/ │ │ └── css/ │ │ └── login.css │ └── templates/ │ ├── 403.html │ ├── index.html │ ├── login.html │ └── user.html ├── 17.Spring-Boot-Shiro-Session/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── config/ │ │ │ └── ShiroConfig.java │ │ ├── controller/ │ │ │ ├── LoginController.java │ │ │ ├── SessionController.java │ │ │ └── UserController.java │ │ ├── dao/ │ │ │ ├── UserMapper.java │ │ │ ├── UserPermissionMapper.java │ │ │ └── UserRoleMapper.java │ │ ├── handler/ │ │ │ └── GlobalExceptionHandler.java │ │ ├── listener/ │ │ │ └── ShiroSessionListener.java │ │ ├── pojo/ │ │ │ ├── Permission.java │ │ │ ├── ResponseBo.java │ │ │ ├── Role.java │ │ │ ├── User.java │ │ │ └── UserOnline.java │ │ ├── service/ │ │ │ ├── SessionService.java │ │ │ └── impl/ │ │ │ └── SessionServiceImpl.java │ │ ├── shiro/ │ │ │ └── ShiroRealm.java │ │ └── util/ │ │ └── MD5Utils.java │ └── resources/ │ ├── application.yml │ ├── config/ │ │ └── shiro-ehcache.xml │ ├── init.sql │ ├── mapper/ │ │ ├── UserMapper.xml │ │ ├── UserPermissionMapper.xml │ │ └── UserRoleMapper.xml │ ├── static/ │ │ ├── css/ │ │ │ └── login.css │ │ └── js/ │ │ └── dateFormat.js │ └── templates/ │ ├── 403.html │ ├── index.html │ ├── login.html │ ├── online.html │ └── user.html ├── 18.Spring-Boot-Jackson/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ ├── JacksonConfig.java │ │ │ │ ├── UserDeserializer.java │ │ │ │ └── UserSerializer.java │ │ │ ├── controller/ │ │ │ │ └── TestJsonController.java │ │ │ └── pojo/ │ │ │ └── User.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── demo/ │ └── DemoApplicationTests.java ├── 19.Spring-Boot-Testing/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── demo/ │ │ │ └── springboot/ │ │ │ └── test/ │ │ │ ├── TestApplication.java │ │ │ ├── config/ │ │ │ │ └── MyMapper.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ ├── domain/ │ │ │ │ └── User.java │ │ │ ├── mapper/ │ │ │ │ ├── SeqenceMapper.java │ │ │ │ └── UserMapper.java │ │ │ └── service/ │ │ │ ├── IService.java │ │ │ ├── UserService.java │ │ │ └── impl/ │ │ │ ├── BaseService.java │ │ │ └── UserServiceImpl.java │ │ └── resources/ │ │ ├── application.yml │ │ ├── config/ │ │ │ └── mybatis-config.xml │ │ └── init.sql │ └── test/ │ └── java/ │ └── demo/ │ └── springboot/ │ └── test/ │ └── UserControllerTest.java ├── 20.Spring-Boot-Swagger2/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ ├── SwaggerConfig.java │ │ │ │ └── WebConfig.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ └── domain/ │ │ │ └── User.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── demo/ │ └── DemoApplicationTests.java ├── 21.Spring-Boot-Actuator/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── springboot/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── springboot/ │ └── demo/ │ └── DemoApplicationTests.java ├── 22.Spring-Boot-Email/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── springboot/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ └── controller/ │ │ │ └── EmailController.java │ │ └── resources/ │ │ ├── application.yml │ │ ├── static/ │ │ │ └── file/ │ │ │ └── 项目文档.docx │ │ └── templates/ │ │ └── emailTemplate.html │ └── test/ │ └── java/ │ └── com/ │ └── springboot/ │ └── demo/ │ └── DemoApplicationTests.java ├── 23.Spring-Boot-Admin/ │ ├── Spring Boot Admin Client/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── example/ │ │ │ │ └── demo/ │ │ │ │ └── DemoApplication.java │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── example/ │ │ └── demo/ │ │ └── DemoApplicationTests.java │ └── Spring Boot Admin Server/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── demo/ │ └── DemoApplicationTests.java ├── 24.Spring-Boot-Devtools/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── springboot/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ └── application.yml │ └── test/ │ └── java/ │ └── com/ │ └── springboot/ │ └── demo/ │ └── DemoApplicationTests.java ├── 25.Spring-Boot-Exception/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── mrbird/ │ │ │ ├── Application.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ ├── exception/ │ │ │ │ └── UserNotExistException.java │ │ │ └── handler/ │ │ │ └── ControllerExceptionHandler.java │ │ └── resources/ │ │ ├── application.properties │ │ └── resources/ │ │ └── error/ │ │ └── 500.html │ └── test/ │ └── java/ │ └── cc/ │ └── mrbird/ │ └── cc/ │ └── mrbird/ │ └── demo/ │ └── ApplicationTests.java ├── 26.Spring-Boot-Filter-Interceptor/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── mrbird/ │ │ │ ├── Application.java │ │ │ ├── config/ │ │ │ │ └── WebConfig.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ ├── filter/ │ │ │ │ └── TimeFilter.java │ │ │ └── interceptor/ │ │ │ └── TimeInterceptor.java │ │ └── resources/ │ │ ├── application.properties │ │ └── resources/ │ │ └── error/ │ │ └── 500.html │ └── test/ │ └── java/ │ └── cc/ │ └── mrbird/ │ └── cc/ │ └── mrbird/ │ └── demo/ │ └── ApplicationTests.java ├── 27.Spring-Boot-Mapper-PageHelper/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── springboot/ │ │ ├── Application.java │ │ ├── ApplicationTest.java │ │ ├── bean/ │ │ │ └── User.java │ │ ├── config/ │ │ │ └── MyMapper.java │ │ ├── mapper/ │ │ │ ├── SeqenceMapper.java │ │ │ └── UserMapper.java │ │ └── service/ │ │ ├── IService.java │ │ ├── UserService.java │ │ └── impl/ │ │ ├── BaseService.java │ │ └── UserServiceImpl.java │ └── resources/ │ ├── application.yml │ ├── mapper/ │ │ └── UserMapper.xml │ └── mybatis-generator.xml ├── 28.Spring-Cloud-Eureka-Server-Discovery/ │ ├── Eureka-Client/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ └── controller/ │ │ │ └── TestController.java │ │ └── resources/ │ │ └── application.yml │ ├── Eureka-Service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ ├── application-peer1.yml │ │ ├── application-peer2.yml │ │ └── application.yml │ └── Server-Consumer/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── demo/ │ │ ├── DemoApplication.java │ │ └── controller/ │ │ └── TestController.java │ └── resources/ │ └── application.yml ├── 29.Spring-Cloud-Ribbon-LoadBalance/ │ ├── Eureka-Client/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ ├── TestController.java │ │ │ │ └── UserController.java │ │ │ └── domain/ │ │ │ └── User.java │ │ └── resources/ │ │ └── application.yml │ ├── Eureka-Service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ ├── application-peer1.yml │ │ ├── application-peer2.yml │ │ └── application.yml │ └── Ribbon-Consumer/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── demo/ │ │ ├── DemoApplication.java │ │ ├── controller/ │ │ │ └── TestController.java │ │ └── domain/ │ │ └── User.java │ └── resources/ │ └── application.yml ├── 30.Spring-Cloud-Hystrix-Circuit-Breaker/ │ ├── Eureka-Client/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ ├── TestController.java │ │ │ │ └── UserController.java │ │ │ └── domain/ │ │ │ └── User.java │ │ └── resources/ │ │ └── application.yml │ ├── Eureka-Service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ ├── application-peer1.yml │ │ ├── application-peer2.yml │ │ └── application.yml │ └── Ribbon-Consumer/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── demo/ │ │ ├── DemoApplication.java │ │ ├── Service/ │ │ │ └── UserService.java │ │ ├── controller/ │ │ │ └── TestController.java │ │ ├── domain/ │ │ │ └── User.java │ │ └── filter/ │ │ └── HystrixRequestContextServletFilter.java │ └── resources/ │ └── application.yml ├── 31.Spring-Cloud-Hystrix-Dashboard-Turbine/ │ ├── Eureka-Client/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ ├── TestController.java │ │ │ │ └── UserController.java │ │ │ └── domain/ │ │ │ └── User.java │ │ └── resources/ │ │ └── application.yml │ ├── Eureka-Service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ ├── application-peer1.yml │ │ ├── application-peer2.yml │ │ └── application.yml │ ├── Hystrix-Dashboard/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── Ribbon-Consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── Service/ │ │ │ │ └── UserService.java │ │ │ ├── controller/ │ │ │ │ └── TestController.java │ │ │ ├── domain/ │ │ │ │ └── User.java │ │ │ └── filter/ │ │ │ └── HystrixRequestContextServletFilter.java │ │ └── resources/ │ │ └── application.yml │ └── Turbine/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── demo/ │ │ └── DemoApplication.java │ └── resources/ │ └── application.yml ├── 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/ │ ├── Eureka-Client/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ ├── TestController.java │ │ │ │ └── UserController.java │ │ │ └── domain/ │ │ │ └── User.java │ │ └── resources/ │ │ └── application.yml │ ├── Eureka-Service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ ├── application-peer1.yml │ │ ├── application-peer2.yml │ │ └── application.yml │ ├── Hystrix-Dashboard/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── Ribbon-Consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── Service/ │ │ │ │ └── UserService.java │ │ │ ├── controller/ │ │ │ │ └── TestController.java │ │ │ ├── domain/ │ │ │ │ └── User.java │ │ │ └── filter/ │ │ │ └── HystrixRequestContextServletFilter.java │ │ └── resources/ │ │ └── application.yml │ └── Turbine-Stream/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── demo/ │ │ └── DemoApplication.java │ └── resources/ │ └── application.yml ├── 33.Spring-Cloud-Feign-Declarative-REST-Client/ │ ├── Eureka-Client/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ ├── TestController.java │ │ │ │ └── UserController.java │ │ │ └── domain/ │ │ │ └── User.java │ │ └── resources/ │ │ └── application.yml │ ├── Eureka-Service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ ├── application-peer1.yml │ │ ├── application-peer2.yml │ │ └── application.yml │ └── Feign-Consumer/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── demo/ │ │ ├── DemoApplication.java │ │ ├── controller/ │ │ │ └── TestController.java │ │ ├── domain/ │ │ │ └── User.java │ │ └── service/ │ │ ├── UserService.java │ │ └── UserServiceFallback.java │ └── resources/ │ └── application.yml ├── 34.Start-Spring-Security/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── SecurityApplication.java │ │ ├── security/ │ │ │ └── browser/ │ │ │ └── BrowserSecurityConfig.java │ │ └── web/ │ │ └── controller/ │ │ └── TestController.java │ └── resources/ │ └── application.yml ├── 35.Spring-Security-Authentication/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── SecurityApplication.java │ │ ├── domain/ │ │ │ └── MyUser.java │ │ ├── handler/ │ │ │ ├── MyAuthenticationFailureHandler.java │ │ │ └── MyAuthenticationSucessHandler.java │ │ ├── security/ │ │ │ └── browser/ │ │ │ ├── BrowserSecurityConfig.java │ │ │ └── UserDetailService.java │ │ └── web/ │ │ └── controller/ │ │ ├── BrowserSecurityController.java │ │ └── TestController.java │ └── resources/ │ ├── application.yml │ └── resources/ │ ├── css/ │ │ └── login.css │ └── login.html ├── 36.Spring-Security-ValidateCode/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── SecurityApplication.java │ │ ├── domain/ │ │ │ └── MyUser.java │ │ ├── handler/ │ │ │ ├── MyAuthenticationFailureHandler.java │ │ │ └── MyAuthenticationSucessHandler.java │ │ ├── security/ │ │ │ └── browser/ │ │ │ ├── BrowserSecurityConfig.java │ │ │ └── UserDetailService.java │ │ ├── validate/ │ │ │ └── code/ │ │ │ ├── ImageCode.java │ │ │ ├── ValidateCodeException.java │ │ │ └── ValidateCodeFilter.java │ │ └── web/ │ │ └── controller/ │ │ ├── BrowserSecurityController.java │ │ ├── TestController.java │ │ └── ValidateController.java │ └── resources/ │ ├── application.yml │ └── resources/ │ ├── css/ │ │ └── login.css │ └── login.html ├── 37.Spring-Security-RememberMe/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── SecurityApplication.java │ │ ├── domain/ │ │ │ └── MyUser.java │ │ ├── handler/ │ │ │ ├── MyAuthenticationFailureHandler.java │ │ │ └── MyAuthenticationSucessHandler.java │ │ ├── security/ │ │ │ └── browser/ │ │ │ ├── BrowserSecurityConfig.java │ │ │ └── UserDetailService.java │ │ ├── validate/ │ │ │ └── code/ │ │ │ ├── ImageCode.java │ │ │ ├── ValidateCodeException.java │ │ │ └── ValidateCodeFilter.java │ │ └── web/ │ │ └── controller/ │ │ ├── BrowserSecurityController.java │ │ ├── TestController.java │ │ └── ValidateController.java │ └── resources/ │ ├── application.yml │ └── resources/ │ ├── css/ │ │ └── login.css │ └── login.html ├── 38.Spring-Security-SmsCode/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── SecurityApplication.java │ │ ├── domain/ │ │ │ └── MyUser.java │ │ ├── handler/ │ │ │ ├── MyAuthenticationFailureHandler.java │ │ │ └── MyAuthenticationSucessHandler.java │ │ ├── security/ │ │ │ └── browser/ │ │ │ ├── BrowserSecurityConfig.java │ │ │ └── UserDetailService.java │ │ ├── validate/ │ │ │ ├── code/ │ │ │ │ ├── ImageCode.java │ │ │ │ ├── ValidateCodeException.java │ │ │ │ └── ValidateCodeFilter.java │ │ │ └── smscode/ │ │ │ ├── SmsAuthenticationConfig.java │ │ │ ├── SmsAuthenticationFilter.java │ │ │ ├── SmsAuthenticationProvider.java │ │ │ ├── SmsAuthenticationToken.java │ │ │ ├── SmsCode.java │ │ │ └── SmsCodeFilter.java │ │ └── web/ │ │ └── controller/ │ │ ├── BrowserSecurityController.java │ │ ├── TestController.java │ │ └── ValidateController.java │ └── resources/ │ ├── application.yml │ └── resources/ │ ├── css/ │ │ └── login.css │ └── login.html ├── 39.Spring-Cloud-Zuul-Router/ │ ├── Eureka-Client/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ ├── TestController.java │ │ │ │ └── UserController.java │ │ │ └── domain/ │ │ │ └── User.java │ │ └── resources/ │ │ └── application.yml │ ├── Eureka-Service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ ├── application-peer1.yml │ │ ├── application-peer2.yml │ │ └── application.yml │ ├── Feign-Consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ └── TestController.java │ │ │ ├── domain/ │ │ │ │ └── User.java │ │ │ └── service/ │ │ │ ├── UserService.java │ │ │ └── UserServiceFallback.java │ │ └── resources/ │ │ └── application.yml │ └── Zuul-Gateway/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── demo/ │ │ ├── DemoApplication.java │ │ └── filter/ │ │ └── PreSendForwardFilter.java │ └── resources/ │ └── application.yml ├── 40.Spring-Boot-Dubbo-Zookeeper/ │ ├── common-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── common/ │ │ └── api/ │ │ └── HelloService.java │ ├── pom.xml │ ├── server-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── mrbird/ │ │ │ ├── ConsumerApplicaiton.java │ │ │ └── consumer/ │ │ │ └── controller/ │ │ │ └── HelloController.java │ │ └── resources/ │ │ └── application.yml │ └── server-provider/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── ProviderApplicaiton.java │ │ └── provider/ │ │ └── service/ │ │ └── HelloServiceImpl.java │ └── resources/ │ └── application.yml ├── 41.Spring-Cloud-Config/ │ ├── Eureka-Service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ ├── application-peer1.yml │ │ ├── application-peer2.yml │ │ └── application.yml │ ├── config-client/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── mrbird/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ └── controller/ │ │ │ └── TestController.java │ │ └── resources/ │ │ └── bootstrap.yml │ ├── config-server/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── mrbird/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ ├── application.yml │ │ ├── bootstrap.yml │ │ └── config-server.keystore │ └── properties/ │ ├── febs-dev.yml │ ├── febs-pro.yml │ ├── febs-test.yml │ └── febs.yml ├── 42.Spring-Cloud-Bus/ │ ├── Eureka-Service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ ├── application-peer1.yml │ │ ├── application-peer2.yml │ │ └── application.yml │ ├── config-client/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── mrbird/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ └── controller/ │ │ │ └── TestController.java │ │ └── resources/ │ │ └── bootstrap.yml │ └── config-server/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── demo/ │ │ └── DemoApplication.java │ └── resources/ │ ├── application.yml │ ├── bootstrap.yml │ └── config-server.keystore ├── 43.Spring-Cloud-Sleuth/ │ ├── Eureka-Service/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ └── DemoApplication.java │ │ └── resources/ │ │ ├── application-peer1.yml │ │ ├── application-peer2.yml │ │ └── application.yml │ ├── Server-Provider1/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ └── controller/ │ │ │ └── HelloController.java │ │ └── resources/ │ │ └── application.yml │ ├── Server-Provider2/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ └── controller/ │ │ │ └── HelloController.java │ │ └── resources/ │ │ └── application.yml │ └── Zipkin-Server/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── demo/ │ │ └── DemoApplication.java │ └── resources/ │ └── application.yml ├── 44.Spring-Boot-Autoconfiguration/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── annotation/ │ │ │ │ ├── EnableHelloWorld.java │ │ │ │ ├── FirstLevelService.java │ │ │ │ └── SecondLevelService.java │ │ │ ├── bootstrap/ │ │ │ │ ├── EnableAutoConfigurationBootstrap.java │ │ │ │ ├── ServiceBootstrap.java │ │ │ │ └── TestEnableBootstap.java │ │ │ ├── configuration/ │ │ │ │ ├── HelloWorldAutoConfiguration.java │ │ │ │ └── HelloWorldConfiguration.java │ │ │ ├── selector/ │ │ │ │ └── HelloWorldImportSelector.java │ │ │ └── service/ │ │ │ └── TestService.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── spring.factories │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── demo/ │ └── DemoApplicationTests.java ├── 45.Spring-Boot-SpringApplication/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── initializer/ │ │ │ │ ├── AfterHelloApplicationContextInitializer.java │ │ │ │ └── HelloApplicationContextInitializer.java │ │ │ ├── listener/ │ │ │ │ ├── AfterContextClosedEventListener.java │ │ │ │ ├── ContextClosedEventListener.java │ │ │ │ └── HelloApplicationRunListener.java │ │ │ └── runner/ │ │ │ ├── HelloApplicationRunner.java │ │ │ └── HelloCommandLineRunner.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── spring.factories │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── demo/ │ └── DemoApplicationTests.java ├── 46.Spring-Boot-Hibernate-Validator/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── controller/ │ │ │ │ └── TestController.java │ │ │ ├── domain/ │ │ │ │ └── User.java │ │ │ └── handler/ │ │ │ └── GlobalExceptionHandler.java │ │ └── resources/ │ │ ├── ValidationMessages.properties │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── demo/ │ └── DemoApplicationTests.java ├── 47.Spring-Boot-Content-Negotiation/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── WebConfigurer.java │ │ │ ├── controller/ │ │ │ │ └── TestController.java │ │ │ ├── converter/ │ │ │ │ └── PropertiesHttpMessageConverter.java │ │ │ ├── handler/ │ │ │ │ └── PropertiesHandlerMethodReturnValueHandler.java │ │ │ └── resolver/ │ │ │ └── PropertiesHandlerMethodArgumentResolver.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── demo/ │ └── DemoApplicationTests.java ├── 48.Spring-Boot-CORS-Support/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── WebConfigurer.java │ │ │ └── controller/ │ │ │ └── TestController.java │ │ └── resources/ │ │ ├── application.properties │ │ └── templates/ │ │ └── index.html │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── demo/ │ └── DemoApplicationTests.java ├── 49.Spring-Boot-Async/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── DemoApplication.java │ │ │ ├── config/ │ │ │ │ └── AsyncPoolConfig.java │ │ │ ├── controller/ │ │ │ │ └── TestController.java │ │ │ └── service/ │ │ │ └── TestService.java │ │ └── resources/ │ │ └── application.properties │ └── test/ │ └── java/ │ └── com/ │ └── example/ │ └── demo/ │ └── DemoApplicationTests.java ├── 50.Spring-Regist-Bean/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── DemoApplication.java │ │ └── demo/ │ │ ├── condition/ │ │ │ └── MyCondition.java │ │ ├── config/ │ │ │ └── WebConfig.java │ │ ├── controller/ │ │ │ └── UserController.java │ │ ├── dao/ │ │ │ └── UserMapper.java │ │ ├── domain/ │ │ │ ├── Apple.java │ │ │ ├── Banana.java │ │ │ ├── Cherry.java │ │ │ ├── Hello.java │ │ │ ├── Strawberry.java │ │ │ ├── User.java │ │ │ ├── UserDetail.java │ │ │ └── Watermelon.java │ │ ├── factory/ │ │ │ └── CherryFactoryBean.java │ │ ├── filter/ │ │ │ └── MyTypeFilter.java │ │ ├── register/ │ │ │ └── MyImportBeanDefinitionRegistrar.java │ │ ├── selector/ │ │ │ └── MyImportSelector.java │ │ └── service/ │ │ ├── CalculateService.java │ │ ├── UserService.java │ │ └── impl/ │ │ ├── Java7CalculateServiceImpl.java │ │ └── Java8CalculateServiceImpl.java │ └── resources/ │ └── application.properties ├── 51.Spring-Bean-Lifecycle/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── DemoApplication.java │ │ └── demo/ │ │ ├── config/ │ │ │ ├── MyBeanPostProcessor.java │ │ │ └── WebConfig.java │ │ └── domain/ │ │ ├── Bird.java │ │ ├── Fish.java │ │ └── User.java │ └── resources/ │ └── application.properties ├── 52.Dubbo-OPS-Mointor/ │ └── spring-boot-dubbo-applicaiton/ │ ├── common-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── common/ │ │ └── api/ │ │ └── HelloService.java │ ├── pom.xml │ ├── server-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── mrbird/ │ │ │ ├── ConsumerApplicaiton.java │ │ │ └── consumer/ │ │ │ └── controller/ │ │ │ └── HelloController.java │ │ └── resources/ │ │ └── application.yml │ └── server-provider/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── ProviderApplicaiton.java │ │ └── provider/ │ │ └── service/ │ │ └── HelloServiceImpl.java │ └── resources/ │ └── application.yml ├── 53.Dubbo-High-Availability/ │ ├── common-api/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── common/ │ │ └── api/ │ │ └── HelloService.java │ ├── pom.xml │ ├── server-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── mrbird/ │ │ │ ├── ConsumerApplicaiton.java │ │ │ └── consumer/ │ │ │ └── controller/ │ │ │ └── HelloController.java │ │ └── resources/ │ │ └── application.yml │ └── server-provider/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── ProviderApplicaiton.java │ │ └── provider/ │ │ └── service/ │ │ └── HelloServiceImpl.java │ └── resources/ │ └── application.yml ├── 54.Spring-Boot-Kafka/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── demo/ │ │ ├── KafkaApplication.java │ │ ├── config/ │ │ │ ├── KafkaConsumerConfig.java │ │ │ └── KafkaProducerConfig.java │ │ ├── controller/ │ │ │ └── SendMessageController.java │ │ ├── domain/ │ │ │ └── Message.java │ │ └── listener/ │ │ └── KafkaMessageListener.java │ └── resources/ │ └── application.yml ├── 55.Spring-Cloud-Consul/ │ ├── server-consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── demo/ │ │ │ ├── ServerConsumerApplication.java │ │ │ └── TestController.java │ │ └── resources/ │ │ └── application.yml │ └── server-proivder/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── demo/ │ │ ├── ServerProviderApplication.java │ │ └── TestController.java │ └── resources/ │ └── application.yml ├── 56.Spring-Boot-MongoDB-crud/ │ ├── Mongo DB crud.postman_collection.json │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── mongodb/ │ │ ├── MongodbApplication.java │ │ ├── controller/ │ │ │ └── UserController.java │ │ ├── dao/ │ │ │ └── UserDao.java │ │ ├── domain/ │ │ │ └── User.java │ │ └── service/ │ │ └── UserService.java │ └── resources/ │ └── application.yml ├── 57.Spring-Boot-WebFlux/ │ ├── async-servlet/ │ │ ├── src/ │ │ │ ├── AsyncServlet.java │ │ │ └── SyncServlet.java │ │ └── web/ │ │ ├── WEB-INF/ │ │ │ └── web.xml │ │ └── index.html │ └── webflux/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── webflux/ │ │ ├── FluxTest.java │ │ ├── MonoFluxTest.java │ │ ├── MonoTest.java │ │ ├── TestController.java │ │ ├── ViewController.java │ │ └── WebfluxApplication.java │ └── resources/ │ ├── application.yml │ └── templates/ │ └── flux.html ├── 58.Spring-Boot-WebFlux-crud/ │ ├── pom.xml │ ├── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── example/ │ │ │ └── webflux/ │ │ │ ├── WebfluxApplication.java │ │ │ ├── controller/ │ │ │ │ └── UserController.java │ │ │ ├── dao/ │ │ │ │ └── UserDao.java │ │ │ ├── domain/ │ │ │ │ └── User.java │ │ │ └── service/ │ │ │ └── UserService.java │ │ └── resources/ │ │ └── application.yml │ └── webflux crud.postman_collection.json ├── 59.Spring-Security-SessionManager/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── SecurityApplication.java │ │ ├── domain/ │ │ │ └── MyUser.java │ │ ├── handler/ │ │ │ ├── MyAuthenticationFailureHandler.java │ │ │ └── MyAuthenticationSucessHandler.java │ │ ├── security/ │ │ │ └── browser/ │ │ │ ├── BrowserSecurityConfig.java │ │ │ └── UserDetailService.java │ │ ├── session/ │ │ │ └── MySessionExpiredStrategy.java │ │ ├── validate/ │ │ │ ├── code/ │ │ │ │ ├── ImageCode.java │ │ │ │ ├── ValidateCodeException.java │ │ │ │ └── ValidateCodeFilter.java │ │ │ └── smscode/ │ │ │ ├── SmsAuthenticationConfig.java │ │ │ ├── SmsAuthenticationFilter.java │ │ │ ├── SmsAuthenticationProvider.java │ │ │ ├── SmsAuthenticationToken.java │ │ │ ├── SmsCode.java │ │ │ └── SmsCodeFilter.java │ │ └── web/ │ │ └── controller/ │ │ ├── BrowserSecurityController.java │ │ ├── TestController.java │ │ └── ValidateController.java │ └── resources/ │ ├── application.yml │ └── resources/ │ ├── css/ │ │ └── login.css │ └── login.html ├── 60.Spring-Security-Logout/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── SecurityApplication.java │ │ ├── domain/ │ │ │ └── MyUser.java │ │ ├── handler/ │ │ │ ├── MyAuthenticationFailureHandler.java │ │ │ ├── MyAuthenticationSucessHandler.java │ │ │ └── MyLogOutSuccessHandler.java │ │ ├── security/ │ │ │ └── browser/ │ │ │ ├── BrowserSecurityConfig.java │ │ │ └── UserDetailService.java │ │ ├── session/ │ │ │ └── MySessionExpiredStrategy.java │ │ ├── validate/ │ │ │ ├── code/ │ │ │ │ ├── ImageCode.java │ │ │ │ ├── ValidateCodeException.java │ │ │ │ └── ValidateCodeFilter.java │ │ │ └── smscode/ │ │ │ ├── SmsAuthenticationConfig.java │ │ │ ├── SmsAuthenticationFilter.java │ │ │ ├── SmsAuthenticationProvider.java │ │ │ ├── SmsAuthenticationToken.java │ │ │ ├── SmsCode.java │ │ │ └── SmsCodeFilter.java │ │ └── web/ │ │ └── controller/ │ │ ├── BrowserSecurityController.java │ │ ├── TestController.java │ │ └── ValidateController.java │ └── resources/ │ ├── application.yml │ └── resources/ │ ├── css/ │ │ └── login.css │ └── login.html ├── 61.Spring-security-Permission/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ ├── SecurityApplication.java │ │ ├── domain/ │ │ │ └── MyUser.java │ │ ├── handler/ │ │ │ ├── MyAuthenticationAccessDeniedHandler.java │ │ │ ├── MyAuthenticationFailureHandler.java │ │ │ ├── MyAuthenticationSucessHandler.java │ │ │ └── MyLogOutSuccessHandler.java │ │ ├── security/ │ │ │ └── browser/ │ │ │ ├── BrowserSecurityConfig.java │ │ │ └── UserDetailService.java │ │ ├── session/ │ │ │ └── MySessionExpiredStrategy.java │ │ ├── validate/ │ │ │ ├── code/ │ │ │ │ ├── ImageCode.java │ │ │ │ ├── ValidateCodeException.java │ │ │ │ └── ValidateCodeFilter.java │ │ │ └── smscode/ │ │ │ ├── SmsAuthenticationConfig.java │ │ │ ├── SmsAuthenticationFilter.java │ │ │ ├── SmsAuthenticationProvider.java │ │ │ ├── SmsAuthenticationToken.java │ │ │ ├── SmsCode.java │ │ │ └── SmsCodeFilter.java │ │ └── web/ │ │ └── controller/ │ │ ├── BrowserSecurityController.java │ │ ├── TestController.java │ │ └── ValidateController.java │ └── resources/ │ ├── application.yml │ └── resources/ │ ├── css/ │ │ └── login.css │ └── login.html ├── 62.Spring-Boot-Shiro-JWT/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── demo/ │ │ ├── DemoApplication.java │ │ ├── authentication/ │ │ │ ├── JWTFilter.java │ │ │ ├── JWTToken.java │ │ │ ├── JWTUtil.java │ │ │ ├── ShiroConfig.java │ │ │ └── ShiroRealm.java │ │ ├── controller/ │ │ │ ├── LoginController.java │ │ │ └── TestController.java │ │ ├── domain/ │ │ │ ├── Response.java │ │ │ └── User.java │ │ ├── exception/ │ │ │ └── SystemException.java │ │ ├── handler/ │ │ │ └── GlobalExceptionHandler.java │ │ ├── properties/ │ │ │ └── SystemProperties.java │ │ ├── runner/ │ │ │ └── PrintRunner.java │ │ └── utils/ │ │ ├── DateUtil.java │ │ ├── MD5Util.java │ │ ├── SpringContextUtil.java │ │ └── SystemUtils.java │ └── resources/ │ ├── ValidationMessages.properties │ ├── application.yml │ ├── postman.json │ └── readme.md ├── 63.Spring-Security-OAuth2-Guide/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── security/ │ │ ├── SecurityApplication.java │ │ ├── config/ │ │ │ ├── AuthorizationServerConfig.java │ │ │ └── ResourceServerConfig.java │ │ ├── controller/ │ │ │ └── UserController.java │ │ ├── domain/ │ │ │ └── MyUser.java │ │ └── service/ │ │ └── UserDetailService.java │ └── resources/ │ └── application.yml ├── 64.Spring-Security-OAuth2-Customize/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── security/ │ │ ├── SecurityApplication.java │ │ ├── config/ │ │ │ ├── AuthorizationServerConfig.java │ │ │ └── ResourceServerConfig.java │ │ ├── controller/ │ │ │ ├── UserController.java │ │ │ └── ValidateController.java │ │ ├── domain/ │ │ │ └── MyUser.java │ │ ├── handler/ │ │ │ ├── MyAuthenticationFailureHandler.java │ │ │ └── MyAuthenticationSucessHandler.java │ │ ├── service/ │ │ │ ├── RedisCodeService.java │ │ │ └── UserDetailService.java │ │ └── validate/ │ │ └── smscode/ │ │ ├── SmsAuthenticationConfig.java │ │ ├── SmsAuthenticationFilter.java │ │ ├── SmsAuthenticationProvider.java │ │ ├── SmsAuthenticationToken.java │ │ ├── SmsCode.java │ │ └── SmsCodeFilter.java │ └── resources/ │ └── application.yml ├── 65.Spring-Security-OAuth2-Config/ │ ├── pom.xml │ ├── security.postman_collection.json │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── security/ │ │ ├── SecurityApplication.java │ │ ├── config/ │ │ │ ├── AuthorizationServerConfig.java │ │ │ ├── JWTokenConfig.java │ │ │ ├── ResourceServerConfig.java │ │ │ ├── SecurityConfig.java │ │ │ └── TokenStoreConfig.java │ │ ├── controller/ │ │ │ ├── UserController.java │ │ │ └── ValidateController.java │ │ ├── domain/ │ │ │ └── MyUser.java │ │ ├── enhancer/ │ │ │ └── JWTokenEnhancer.java │ │ ├── handler/ │ │ │ ├── MyAuthenticationFailureHandler.java │ │ │ └── MyAuthenticationSucessHandler.java │ │ ├── service/ │ │ │ ├── RedisCodeService.java │ │ │ └── UserDetailService.java │ │ └── validate/ │ │ └── smscode/ │ │ ├── SmsAuthenticationConfig.java │ │ ├── SmsAuthenticationFilter.java │ │ ├── SmsAuthenticationProvider.java │ │ ├── SmsAuthenticationToken.java │ │ ├── SmsCode.java │ │ └── SmsCodeFilter.java │ └── resources/ │ └── application.yml ├── 66.Spring-Security-OAuth2-SSO/ │ ├── pom.xml │ ├── sso-application-one/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── mrbird/ │ │ │ └── sso/ │ │ │ ├── SsoApplicaitonOne.java │ │ │ └── client/ │ │ │ ├── config/ │ │ │ │ └── WebSecurityConfigurer.java │ │ │ └── controller/ │ │ │ └── UserController.java │ │ └── resources/ │ │ ├── application.yml │ │ └── static/ │ │ └── index.html │ ├── sso-application-two/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── mrbird/ │ │ │ └── sso/ │ │ │ ├── SsoApplicaitonTwo.java │ │ │ └── client/ │ │ │ └── controller/ │ │ │ └── UserController.java │ │ └── resources/ │ │ ├── application.yml │ │ └── static/ │ │ └── index.html │ └── sso-server/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── sso/ │ │ ├── SsoServerApplication.java │ │ └── server/ │ │ ├── config/ │ │ │ ├── SsoAuthorizationServerConfig.java │ │ │ └── WebSecurityConfig.java │ │ ├── domain/ │ │ │ └── MyUser.java │ │ └── service/ │ │ └── UserDetailService.java │ └── resources/ │ └── application.yml ├── 67.spring-batch-start/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── batch/ │ │ ├── SpringBatchStartApplication.java │ │ ├── decider/ │ │ │ └── MyDecider.java │ │ └── job/ │ │ ├── DeciderJobDemo.java │ │ ├── FirstJobDemo.java │ │ ├── FlowJobDemo.java │ │ ├── MultiStepJobDemo.java │ │ ├── NestedJobDemo.java │ │ └── SplitJobDemo.java │ └── resources/ │ └── application.yml ├── 68.spring-batch-itemreader/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── batch/ │ │ ├── SpringBatchItemreaderApplication.java │ │ ├── entity/ │ │ │ └── TestData.java │ │ ├── job/ │ │ │ ├── DataSourceItemReaderDemo.java │ │ │ ├── FileItemReaderDemo.java │ │ │ ├── JSONFileItemReaderDemo.java │ │ │ ├── MultiFileIteamReaderDemo.java │ │ │ ├── MySimpleItemReaderDemo.java │ │ │ └── XmlFileItemReaderDemo.java │ │ └── reader/ │ │ └── MySimpleIteamReader.java │ └── resources/ │ ├── TEST.sql │ ├── application.yml │ ├── file │ ├── file.json │ ├── file.xml │ ├── file1 │ └── file2 ├── 69.spring-batch-itemwriter/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── batch/ │ │ ├── SpringBatchItemwriterApplication.java │ │ ├── entity/ │ │ │ └── TestData.java │ │ ├── job/ │ │ │ ├── DatabaseItemWriterDemo.java │ │ │ ├── FileItemWriterDemo.java │ │ │ ├── JsonFileItemWriterDemo.java │ │ │ ├── MultiFileItemWriteDemo.java │ │ │ └── XmlFileItemWriterDemo.java │ │ ├── reader/ │ │ │ └── ItemReaderConfigure.java │ │ └── writer/ │ │ └── ItemWriterConfigure.java │ └── resources/ │ └── application.yml ├── 70.spring-batch-itemprocessor/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── batch/ │ │ ├── SpringBatchItemprocessorApplication.java │ │ ├── entity/ │ │ │ ├── TestData.java │ │ │ ├── job/ │ │ │ │ ├── BeanValidatingItemProcessorDemo.java │ │ │ │ ├── CompositeItemProcessorDemo.java │ │ │ │ ├── TestDataFilterItemProcessorDemo.java │ │ │ │ ├── TestDataTransformItemPorcessorDemo.java │ │ │ │ └── ValidatingItemProcessorDemo.java │ │ │ └── reader/ │ │ │ └── ItemReaderConfigure.java │ │ └── processor/ │ │ ├── TestDataFilterItemProcessor.java │ │ └── TestDataTransformItemPorcessor.java │ └── resources/ │ └── application.yml ├── 71.spring-batch-listener/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── batch/ │ │ ├── SpringBatchListenerApplication.java │ │ ├── job/ │ │ │ ├── CompositeJobExecutionListenerJobDemo.java │ │ │ └── ListenerTestJobDemo.java │ │ └── listener/ │ │ ├── MyChunkListener.java │ │ ├── MyItemProcessListener.java │ │ ├── MyItemReaderListener.java │ │ ├── MyItemWriterListener.java │ │ ├── MyJobExecutionListener.java │ │ └── MyStepExecutionListener.java │ └── resources/ │ └── application.yml ├── 72.spring-batch-exception/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── batch/ │ │ ├── SpringBatchExceptionApplication.java │ │ ├── exception/ │ │ │ └── MyJobExecutionException.java │ │ ├── job/ │ │ │ ├── DefaultExceptionJobDemo.java │ │ │ ├── RestartJobDemo.java │ │ │ ├── RetryExceptionJobDemo.java │ │ │ ├── SkipExceptionJobDemo.java │ │ │ └── TransactionJobDemo.java │ │ └── listener/ │ │ └── MySkipListener.java │ └── resources/ │ └── application.yml ├── 73.spring-batch-launcher/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── batch/ │ │ ├── SpringBatchLauncherApplication.java │ │ ├── configure/ │ │ │ └── JobConfigure.java │ │ ├── controller/ │ │ │ └── JobController.java │ │ └── job/ │ │ └── MyJob.java │ └── resources/ │ └── application.yml ├── 74.spring-cloud-alibaba-nacos-register/ │ ├── consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── mrbird/ │ │ │ └── consumer/ │ │ │ ├── ConsumerApplication.java │ │ │ ├── configure/ │ │ │ │ └── ConsumerConfigure.java │ │ │ └── controller/ │ │ │ └── ConsumeController.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── provider/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── provider/ │ │ ├── ProviderApplication.java │ │ └── controller/ │ │ └── HelloController.java │ └── resources/ │ └── application.yml ├── 75.spring-cloud-alibaba-nacos-config/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── nacos/ │ │ ├── SpringCloudAlibabaNacosConfigApplication.java │ │ └── controller/ │ │ └── TestController.java │ └── resources/ │ ├── application.yml │ └── bootstrap.yml ├── 76.spring-boot-websocket-socketjs/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── socket/ │ │ ├── SpringBootWebsocketSocketjsApplication.java │ │ ├── configure/ │ │ │ └── WebSocketServerConfigure.java │ │ └── handler/ │ │ └── MyStringWebSocketHandler.java │ └── resources/ │ ├── application.properties │ └── static/ │ └── client.html ├── 77.spring-cloud-alibaba-sentinel-dashboard-guide/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── sentinel/ │ │ ├── SpringCloudAlibabaSentinelFlowControlApplication.java │ │ ├── controller/ │ │ │ └── TestController.java │ │ └── service/ │ │ └── HelloService.java │ └── resources/ │ └── application.yml ├── 78.spring-cloud-alibaba-sentinelresource/ │ ├── consumer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── cc/ │ │ │ └── mrbird/ │ │ │ └── consumer/ │ │ │ └── ConsumerApplication.java │ │ └── resources/ │ │ └── application.yml │ ├── pom.xml │ └── provider/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── cc/ │ │ └── mrbird/ │ │ └── provider/ │ │ └── ProviderApplication.java │ └── resources/ │ └── application.yml ├── LICENSE └── readme.md
Showing preview only (241K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2687 symbols across 675 files)
FILE: 01.Start-Spring-Boot/src/main/java/com/springboot/demo/DemoApplication.java
class DemoApplication (line 8) | @RestController
method index (line 12) | @RequestMapping("/")
method main (line 17) | public static void main(String[] args) {
FILE: 01.Start-Spring-Boot/src/test/java/com/springboot/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 02.Spring-Boot-Config/src/main/java/com/springboot/Application.java
class Application (line 10) | @SpringBootApplication
method main (line 15) | public static void main(String[] args) {
FILE: 02.Spring-Boot-Config/src/main/java/com/springboot/bean/BlogProperties.java
class BlogProperties (line 6) | @Component
method getName (line 15) | public String getName() {
method setName (line 19) | public void setName(String name) {
method getTitle (line 23) | public String getTitle() {
method setTitle (line 27) | public void setTitle(String title) {
FILE: 02.Spring-Boot-Config/src/main/java/com/springboot/bean/ConfigBean.java
class ConfigBean (line 5) | @ConfigurationProperties(prefix="mrbird.blog")
method getName (line 10) | public String getName() {
method setName (line 13) | public void setName(String name) {
method getTitle (line 16) | public String getTitle() {
method setTitle (line 19) | public void setTitle(String title) {
method getWholeTitle (line 22) | public String getWholeTitle() {
method setWholeTitle (line 25) | public void setWholeTitle(String wholeTitle) {
FILE: 02.Spring-Boot-Config/src/main/java/com/springboot/bean/TestConfigBean.java
class TestConfigBean (line 8) | @Configuration
method getName (line 15) | public String getName() {
method setName (line 18) | public void setName(String name) {
method getAge (line 21) | public int getAge() {
method setAge (line 24) | public void setAge(int age) {
FILE: 02.Spring-Boot-Config/src/main/java/com/springboot/controller/IndexController.java
class IndexController (line 12) | @RestController
method index (line 21) | @RequestMapping("/")
FILE: 02.Spring-Boot-Config/src/test/java/com/springboot/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 03.Spring-Boot-MyBatis/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 03.Spring-Boot-MyBatis/src/main/java/com/springboot/bean/Student.java
class Student (line 5) | public class Student implements Serializable{
method getSno (line 11) | public String getSno() {
method setSno (line 14) | public void setSno(String sno) {
method getName (line 17) | public String getName() {
method setName (line 20) | public void setName(String name) {
method getSex (line 23) | public String getSex() {
method setSex (line 26) | public void setSex(String sex) {
FILE: 03.Spring-Boot-MyBatis/src/main/java/com/springboot/controller/TestController.java
class TestController (line 11) | @RestController
method queryStudentBySno (line 17) | @RequestMapping( value = "/querystudent", method = RequestMethod.GET)
FILE: 03.Spring-Boot-MyBatis/src/main/java/com/springboot/mapper/StudentMapper.java
type StudentMapper (line 14) | @Component
method add (line 17) | @Insert("insert into student(sno,sname,ssex) values(#{sno},#{name},#{s...
method update (line 20) | @Update("update student set sname=#{name},ssex=#{sex} where sno=#{sno}")
method deleteBysno (line 23) | @Delete("delete from student where sno=#{sno}")
method queryStudentBySno (line 26) | @Select("select * from student where sno=#{sno}")
FILE: 03.Spring-Boot-MyBatis/src/main/java/com/springboot/service/StudentService.java
type StudentService (line 5) | public interface StudentService {
method add (line 6) | int add(Student student);
method update (line 7) | int update(Student student);
method deleteBysno (line 8) | int deleteBysno(String sno);
method queryStudentBySno (line 9) | Student queryStudentBySno(String sno);
FILE: 03.Spring-Boot-MyBatis/src/main/java/com/springboot/service/impl/StudentServiceImp.java
class StudentServiceImp (line 10) | @Service("studentService")
method add (line 16) | @Override
method update (line 21) | @Override
method deleteBysno (line 26) | @Override
method queryStudentBySno (line 31) | @Override
FILE: 03.Spring-Boot-MyBatis/src/main/resources/init.sql
type STUDENT (line 1) | CREATE TABLE STUDENT (
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/bean/Student.java
class Student (line 5) | public class Student implements Serializable{
method getSno (line 11) | public String getSno() {
method setSno (line 14) | public void setSno(String sno) {
method getName (line 17) | public String getName() {
method setName (line 20) | public void setName(String name) {
method getSex (line 23) | public String getSex() {
method setSex (line 26) | public void setSex(String sex) {
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/controller/TestController.java
class TestController (line 14) | @RestController
method queryStudentBySno (line 20) | @RequestMapping(value = "/querystudent", method = RequestMethod.GET)
method queryAllStudent (line 25) | @RequestMapping(value = "/queryallstudent")
method saveStudent (line 30) | @RequestMapping(value = "/addstudent", method = RequestMethod.GET)
method deleteStudentBySno (line 39) | @RequestMapping(value = "deletestudent", method = RequestMethod.GET)
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/dao/StudentDao.java
type StudentDao (line 8) | public interface StudentDao {
method add (line 9) | int add(Student student);
method update (line 10) | int update(Student student);
method deleteBysno (line 11) | int deleteBysno(String sno);
method queryStudentsListMap (line 12) | List<Map<String,Object>> queryStudentsListMap();
method queryStudentBySno (line 13) | Student queryStudentBySno(String sno);
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/dao/impl/StudentDaoImp.java
class StudentDaoImp (line 17) | @Repository("studentDao")
method add (line 23) | @Override
method update (line 34) | @Override
method deleteBysno (line 42) | @Override
method queryStudentsListMap (line 50) | @Override
method queryStudentBySno (line 56) | @Override
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/mapper/StudentMapper.java
class StudentMapper (line 10) | public class StudentMapper implements RowMapper<Student>{
method mapRow (line 12) | @Override
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/service/StudentService.java
type StudentService (line 8) | public interface StudentService {
method add (line 9) | int add(Student student);
method update (line 10) | int update(Student student);
method deleteBysno (line 11) | int deleteBysno(String sno);
method queryStudentListMap (line 12) | List<Map<String, Object>> queryStudentListMap();
method queryStudentBySno (line 13) | Student queryStudentBySno(String sno);
FILE: 04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/service/impl/StudentServiceImp.java
class StudentServiceImp (line 14) | @Service("studentService")
method add (line 20) | @Override
method update (line 25) | @Override
method deleteBysno (line 30) | @Override
method queryStudentListMap (line 35) | @Override
method queryStudentBySno (line 40) | @Override
FILE: 04.Spring-Boot-JdbcTemplate/src/main/resources/init.sql
type STUDENT (line 1) | CREATE TABLE STUDENT (
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/controller/StudentController.java
class StudentController (line 12) | @RestController
method queryStudentsFromOracle (line 18) | @RequestMapping("querystudentsfromoracle")
method queryStudentsFromMysql (line 23) | @RequestMapping("querystudentsfrommysql")
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/datasource/MysqlDatasourceConfig.java
class MysqlDatasourceConfig (line 18) | @Configuration
method mysqlDataSource (line 27) | @Primary
method mysqlTransactionManager (line 34) | @Bean(name = "mysqlTransactionManager")
method mysqlSqlSessionFactory (line 40) | @Bean(name = "mysqlSqlSessionFactory")
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/datasource/OracleDatasourceConfig.java
class OracleDatasourceConfig (line 17) | @Configuration
method oracleDataSource (line 27) | @Bean(name = "oracledatasource")
method oracleTransactionManager (line 33) | @Bean(name = "oracleTransactionManager")
method oracleSqlSessionFactory (line 38) | @Bean(name = "oracleSqlSessionFactory")
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/mysqldao/MysqlStudentMapper.java
type MysqlStudentMapper (line 7) | @Mapper
method getAllStudents (line 9) | List<Map<String, Object>> getAllStudents();
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/oracledao/OracleStudentMapper.java
type OracleStudentMapper (line 7) | @Mapper
method getAllStudents (line 9) | List<Map<String, Object>> getAllStudents();
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/service/StudentService.java
type StudentService (line 6) | public interface StudentService {
method getAllStudentsFromOralce (line 7) | List<Map<String, Object>> getAllStudentsFromOralce();
method getAllStudentsFromMysql (line 8) | List<Map<String, Object>> getAllStudentsFromMysql();
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/service/impl/StudentServiceImp.java
class StudentServiceImp (line 13) | @Service("studentService")
method getAllStudentsFromOralce (line 20) | @Override
method getAllStudentsFromMysql (line 25) | @Override
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/resources/mysql_sql.sql
type `student` (line 22) | CREATE TABLE `student` (
FILE: 05.Spring-Boot-MyBatis-MultiDataSource/src/main/resources/oracle_sql.sql
type STUDENT (line 22) | CREATE TABLE STUDENT (
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/controller/StudentController.java
class StudentController (line 12) | @RestController
method queryStudentsFromOracle (line 18) | @RequestMapping("querystudentsfromoracle")
method queryStudentsFromMysql (line 23) | @RequestMapping("querystudentsfrommysql")
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/dao/MysqlStudentDao.java
type MysqlStudentDao (line 7) | public interface MysqlStudentDao {
method getAllStudents (line 8) | List<Map<String, Object>> getAllStudents();
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/dao/OracleStudentDao.java
type OracleStudentDao (line 6) | public interface OracleStudentDao {
method getAllStudents (line 7) | List<Map<String, Object>> getAllStudents();
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/dao/impl/MysqlStudentDaoImp.java
class MysqlStudentDaoImp (line 13) | @Repository
method getAllStudents (line 20) | @Override
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/dao/impl/OracleStudentDaoImp.java
class OracleStudentDaoImp (line 13) | @Repository
method getAllStudents (line 20) | @Override
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/datasource/DataSourceConfig.java
class DataSourceConfig (line 14) | @Configuration
method dataSourceOne (line 16) | @Primary
method dataSourceTwo (line 23) | @Bean(name = "oracledatasource")
method primaryJdbcTemplate (line 29) | @Bean(name = "mysqlJdbcTemplate")
method secondaryJdbcTemplate (line 35) | @Bean(name = "oracleJdbcTemplate")
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/service/StudentService.java
type StudentService (line 6) | public interface StudentService {
method getAllStudentsFromOralce (line 7) | List<Map<String, Object>> getAllStudentsFromOralce();
method getAllStudentsFromMysql (line 8) | List<Map<String, Object>> getAllStudentsFromMysql();
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/service/impl/StudentServiceImp.java
class StudentServiceImp (line 13) | @Service("studentService")
method getAllStudentsFromOralce (line 20) | @Override
method getAllStudentsFromMysql (line 25) | @Override
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/resources/mysql_sql.sql
type `student` (line 22) | CREATE TABLE `student` (
FILE: 06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/resources/oracle_sql.sql
type STUDENT (line 22) | CREATE TABLE STUDENT (
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/aspect/LogAspect.java
class LogAspect (line 23) | @Aspect
method pointcut (line 30) | @Pointcut("@annotation(com.springboot.annotation.Log)")
method around (line 34) | @Around("pointcut()")
method saveLog (line 49) | private void saveLog(ProceedingJoinPoint joinPoint, long time) {
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/controller/TestController.java
class TestController (line 8) | @RestController
method methodOne (line 11) | @Log("执行方法一")
method methodTwo (line 17) | @Log("执行方法二")
method methodThree (line 23) | @Log("执行方法三")
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/dao/SysLogDao.java
type SysLogDao (line 5) | public interface SysLogDao {
method saveSysLog (line 6) | void saveSysLog(SysLog syslog);
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/dao/impl/SysLogDaoImp.java
class SysLogDaoImp (line 12) | @Repository
method saveSysLog (line 18) | @Override
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/domain/SysLog.java
class SysLog (line 6) | public class SysLog implements Serializable{
method getId (line 18) | public Integer getId() {
method setId (line 21) | public void setId(Integer id) {
method getUsername (line 24) | public String getUsername() {
method setUsername (line 27) | public void setUsername(String username) {
method getOperation (line 30) | public String getOperation() {
method setOperation (line 33) | public void setOperation(String operation) {
method getTime (line 36) | public Integer getTime() {
method setTime (line 39) | public void setTime(Integer time) {
method getMethod (line 42) | public String getMethod() {
method setMethod (line 45) | public void setMethod(String method) {
method getParams (line 48) | public String getParams() {
method setParams (line 51) | public void setParams(String params) {
method getIp (line 54) | public String getIp() {
method setIp (line 57) | public void setIp(String ip) {
method getCreateTime (line 60) | public Date getCreateTime() {
method setCreateTime (line 63) | public void setCreateTime(Date createTime) {
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/util/HttpContextUtils.java
class HttpContextUtils (line 8) | public class HttpContextUtils {
method getHttpServletRequest (line 9) | public static HttpServletRequest getHttpServletRequest() {
FILE: 07.Spring-Boot-AOP-Log/src/main/java/com/springboot/util/IPUtils.java
class IPUtils (line 5) | public class IPUtils {
method getIpAddr (line 13) | public static String getIpAddr(HttpServletRequest request) {
FILE: 07.Spring-Boot-AOP-Log/src/main/resources/init.sql
type SYS_LOG (line 1) | CREATE TABLE SYS_LOG (
FILE: 08.Spring-Boot-Thymeleaf/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 08.Spring-Boot-Thymeleaf/src/main/java/com/springboot/bean/Account.java
class Account (line 3) | public class Account {
method Account (line 10) | public Account(String account, String name, String password, String ac...
method getAccount (line 18) | public String getAccount() {
method setAccount (line 21) | public void setAccount(String account) {
method getName (line 24) | public String getName() {
method setName (line 27) | public void setName(String name) {
method getPassword (line 30) | public String getPassword() {
method setPassword (line 33) | public void setPassword(String password) {
method getAccountType (line 36) | public String getAccountType() {
method setAccountType (line 39) | public void setAccountType(String accountType) {
method getTel (line 42) | public String getTel() {
method setTel (line 45) | public void setTel(String tel) {
FILE: 08.Spring-Boot-Thymeleaf/src/main/java/com/springboot/controller/IndexController.java
class IndexController (line 12) | @Controller
method index (line 15) | @RequestMapping("/account")
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/Application.java
class Application (line 8) | @SpringBootApplication
method main (line 12) | public static void main(String[] args) {
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/ApplicationTest.java
class ApplicationTest (line 12) | @RunWith(SpringJUnit4ClassRunner.class)
method test1 (line 19) | @Test
method test2 (line 28) | @Test
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/bean/Student.java
class Student (line 5) | public class Student implements Serializable{
method getSno (line 11) | public String getSno() {
method setSno (line 14) | public void setSno(String sno) {
method getName (line 17) | public String getName() {
method setName (line 20) | public void setName(String name) {
method getSex (line 23) | public String getSex() {
method setSex (line 26) | public void setSex(String sex) {
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/config/RedisConfig.java
class RedisConfig (line 18) | @Configuration
method keyGenerator (line 22) | @Bean
method cacheManager (line 39) | @Bean
method redisTemplate (line 47) | @Bean
method setSerializer (line 55) | private void setSerializer(StringRedisTemplate template) {
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/mapper/StudentMapper.java
type StudentMapper (line 13) | @Mapper
method update (line 17) | @Update("update student set sname=#{name},ssex=#{sex} where sno=#{sno}")
method deleteStudentBySno (line 20) | @Delete("delete from student where sno=#{sno}")
method queryStudentBySno (line 23) | @Select("select * from student where sno=#{sno}")
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/service/StudentService.java
type StudentService (line 10) | @CacheConfig(cacheNames = "student")
method update (line 12) | @CachePut(key = "#p0.sno")
method deleteStudentBySno (line 15) | @CacheEvict(key = "#p0", allEntries = true)
method queryStudentBySno (line 18) | @Cacheable(key = "#p0")
FILE: 09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/service/impl/StudentServiceImpl.java
class StudentServiceImpl (line 10) | @Repository("studentService")
method update (line 16) | @Override
method deleteStudentBySno (line 22) | @Override
method queryStudentBySno (line 27) | @Override
FILE: 09.Spring-Boot-Redis-Cache/src/main/resources/init.sql
type STUDENT (line 1) | CREATE TABLE STUDENT (
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/Application.java
class Application (line 8) | @SpringBootApplication
method main (line 12) | public static void main(String[] args) {
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/ApplicationTest.java
class ApplicationTest (line 13) | @RunWith(SpringJUnit4ClassRunner.class)
method test1 (line 21) | @Test
method test2 (line 30) | @Test
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/bean/Student.java
class Student (line 5) | public class Student implements Serializable{
method getSno (line 11) | public String getSno() {
method setSno (line 14) | public void setSno(String sno) {
method getName (line 17) | public String getName() {
method setName (line 20) | public void setName(String name) {
method getSex (line 23) | public String getSex() {
method setSex (line 26) | public void setSex(String sex) {
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/mapper/StudentMapper.java
type StudentMapper (line 12) | @Mapper
method update (line 15) | @Update("update student set sname=#{name},ssex=#{sex} where sno=#{sno}")
method deleteStudentBySno (line 18) | @Delete("delete from student where sno=#{sno}")
method queryStudentBySno (line 21) | @Select("select * from student where sno=#{sno}")
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/service/StudentService.java
type StudentService (line 10) | @CacheConfig(cacheNames = "student")
method update (line 12) | @CachePut(key = "#p0.sno")
method deleteStudentBySno (line 15) | @CacheEvict(key = "#p0", allEntries = true)
method queryStudentBySno (line 18) | @Cacheable(key = "#p0")
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/service/impl/StudentServiceImpl.java
class StudentServiceImpl (line 10) | @Repository("studentService")
method update (line 16) | @Override
method deleteStudentBySno (line 22) | @Override
method queryStudentBySno (line 27) | @Override
FILE: 10.Spring-Boot-Ehcache-Cache/src/main/resources/init.sql
type STUDENT (line 1) | CREATE TABLE STUDENT (
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/config/ShiroConfig.java
class ShiroConfig (line 13) | @Configuration
method shiroFilterFactoryBean (line 16) | @Bean
method securityManager (line 40) | @Bean
method shiroRealm (line 47) | @Bean
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/controller/LoginController.java
class LoginController (line 21) | @Controller
method login (line 24) | @GetMapping("/login")
method login (line 29) | @PostMapping("/login")
method redirectIndex (line 49) | @RequestMapping("/")
method index (line 54) | @RequestMapping("/index")
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/dao/UserMapper.java
type UserMapper (line 7) | @Mapper
method findByUserName (line 9) | User findByUserName(String userName);
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/pojo/ResponseBo.java
class ResponseBo (line 6) | public class ResponseBo extends HashMap<String, Object>{
method ResponseBo (line 9) | public ResponseBo() {
method error (line 14) | public static ResponseBo error() {
method error (line 18) | public static ResponseBo error(String msg) {
method error (line 22) | public static ResponseBo error(int code, String msg) {
method ok (line 29) | public static ResponseBo ok(String msg) {
method ok (line 35) | public static ResponseBo ok(Map<String, Object> map) {
method ok (line 41) | public static ResponseBo ok() {
method put (line 45) | @Override
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/pojo/User.java
class User (line 6) | public class User implements Serializable{
method getId (line 15) | public Integer getId() {
method setId (line 18) | public void setId(Integer id) {
method getUserName (line 21) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 27) | public String getPassword() {
method setPassword (line 30) | public void setPassword(String password) {
method getCreateTime (line 33) | public Date getCreateTime() {
method setCreateTime (line 36) | public void setCreateTime(Date createTime) {
method getStatus (line 39) | public String getStatus() {
method setStatus (line 42) | public void setStatus(String status) {
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/shiro/ShiroRealm.java
class ShiroRealm (line 18) | public class ShiroRealm extends AuthorizingRealm {
method doGetAuthorizationInfo (line 26) | @Override
method doGetAuthenticationInfo (line 34) | @Override
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/util/MD5Utils.java
class MD5Utils (line 6) | public class MD5Utils {
method encrypt (line 13) | public static String encrypt(String pswd) {
method encrypt (line 18) | public static String encrypt(String username, String pswd) {
method main (line 23) | public static void main(String[] args) {
FILE: 11.Spring-Boot-Shiro-Authentication/src/main/resources/init.sql
type T_USER (line 4) | CREATE TABLE T_USER (
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/config/ShiroConfig.java
class ShiroConfig (line 17) | @Configuration
method shiroFilterFactoryBean (line 20) | @Bean
method securityManager (line 44) | @Bean
method lifecycleBeanPostProcessor (line 52) | @Bean(name = "lifecycleBeanPostProcessor")
method shiroRealm (line 57) | @Bean
method rememberMeCookie (line 67) | public SimpleCookie rememberMeCookie() {
method rememberMeManager (line 79) | public CookieRememberMeManager rememberMeManager() {
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/controller/LoginController.java
class LoginController (line 21) | @Controller
method login (line 24) | @GetMapping("/login")
method login (line 29) | @PostMapping("/login")
method redirectIndex (line 49) | @RequestMapping("/")
method index (line 54) | @RequestMapping("/index")
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/dao/UserMapper.java
type UserMapper (line 7) | @Mapper
method findByUserName (line 9) | User findByUserName(String userName);
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/pojo/ResponseBo.java
class ResponseBo (line 6) | public class ResponseBo extends HashMap<String, Object>{
method ResponseBo (line 9) | public ResponseBo() {
method error (line 14) | public static ResponseBo error() {
method error (line 18) | public static ResponseBo error(String msg) {
method error (line 22) | public static ResponseBo error(int code, String msg) {
method ok (line 29) | public static ResponseBo ok(String msg) {
method ok (line 35) | public static ResponseBo ok(Map<String, Object> map) {
method ok (line 41) | public static ResponseBo ok() {
method put (line 45) | @Override
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/pojo/User.java
class User (line 6) | public class User implements Serializable{
method getId (line 15) | public Integer getId() {
method setId (line 18) | public void setId(Integer id) {
method getUserName (line 21) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 27) | public String getPassword() {
method setPassword (line 30) | public void setPassword(String password) {
method getCreateTime (line 33) | public Date getCreateTime() {
method setCreateTime (line 36) | public void setCreateTime(Date createTime) {
method getStatus (line 39) | public String getStatus() {
method setStatus (line 42) | public void setStatus(String status) {
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/shiro/ShiroRealm.java
class ShiroRealm (line 18) | public class ShiroRealm extends AuthorizingRealm {
method doGetAuthorizationInfo (line 26) | @Override
method doGetAuthenticationInfo (line 34) | @Override
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/util/MD5Utils.java
class MD5Utils (line 6) | public class MD5Utils {
method encrypt (line 13) | public static String encrypt(String pswd) {
method encrypt (line 18) | public static String encrypt(String username, String pswd) {
method main (line 23) | public static void main(String[] args) {
FILE: 12.Spring-Boot-Shiro-RememberMe/src/main/resources/init.sql
type T_USER (line 4) | CREATE TABLE T_USER (
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/config/ShiroConfig.java
class ShiroConfig (line 18) | @Configuration
method shiroFilterFactoryBean (line 21) | @Bean
method securityManager (line 44) | @Bean
method shiroRealm (line 53) | @Bean
method rememberMeCookie (line 59) | public SimpleCookie rememberMeCookie() {
method rememberMeManager (line 65) | public CookieRememberMeManager rememberMeManager() {
method authorizationAttributeSourceAdvisor (line 72) | @Bean
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/controller/LoginController.java
class LoginController (line 21) | @Controller
method login (line 24) | @GetMapping("/login")
method login (line 29) | @PostMapping("/login")
method redirectIndex (line 49) | @RequestMapping("/")
method forbid (line 54) | @GetMapping("/403")
method index (line 59) | @RequestMapping("/index")
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/controller/UserController.java
class UserController (line 8) | @Controller
method userList (line 13) | @RequiresPermissions("user:user")
method userAdd (line 20) | @RequiresPermissions("user:add")
method userDelete (line 27) | @RequiresPermissions("user:delete")
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/dao/UserMapper.java
type UserMapper (line 7) | @Mapper
method findByUserName (line 9) | User findByUserName(String userName);
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/dao/UserPermissionMapper.java
type UserPermissionMapper (line 7) | @Mapper
method findByUserName (line 10) | List<Permission> findByUserName(String userName);
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/dao/UserRoleMapper.java
type UserRoleMapper (line 8) | @Mapper
method findByUserName (line 11) | List<Role> findByUserName(String userName);
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/handler/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 10) | @ControllerAdvice
method handleAuthorizationException (line 14) | @ExceptionHandler(value = AuthorizationException.class)
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/pojo/Permission.java
class Permission (line 5) | public class Permission implements Serializable{
method getId (line 11) | public Integer getId() {
method setId (line 14) | public void setId(Integer id) {
method getUrl (line 17) | public String getUrl() {
method setUrl (line 20) | public void setUrl(String url) {
method getName (line 23) | public String getName() {
method setName (line 26) | public void setName(String name) {
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/pojo/ResponseBo.java
class ResponseBo (line 6) | public class ResponseBo extends HashMap<String, Object>{
method ResponseBo (line 9) | public ResponseBo() {
method error (line 14) | public static ResponseBo error() {
method error (line 18) | public static ResponseBo error(String msg) {
method error (line 22) | public static ResponseBo error(int code, String msg) {
method ok (line 29) | public static ResponseBo ok(String msg) {
method ok (line 35) | public static ResponseBo ok(Map<String, Object> map) {
method ok (line 41) | public static ResponseBo ok() {
method put (line 45) | @Override
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/pojo/Role.java
class Role (line 5) | public class Role implements Serializable{
method getId (line 11) | public Integer getId() {
method setId (line 14) | public void setId(Integer id) {
method getName (line 17) | public String getName() {
method setName (line 20) | public void setName(String name) {
method getMemo (line 23) | public String getMemo() {
method setMemo (line 26) | public void setMemo(String memo) {
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/pojo/User.java
class User (line 6) | public class User implements Serializable{
method getId (line 15) | public Integer getId() {
method setId (line 18) | public void setId(Integer id) {
method getUserName (line 21) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 27) | public String getPassword() {
method setPassword (line 30) | public void setPassword(String password) {
method getCreateTime (line 33) | public Date getCreateTime() {
method setCreateTime (line 36) | public void setCreateTime(Date createTime) {
method getStatus (line 39) | public String getStatus() {
method setStatus (line 42) | public void setStatus(String status) {
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/shiro/ShiroRealm.java
class ShiroRealm (line 28) | public class ShiroRealm extends AuthorizingRealm {
method doGetAuthorizationInfo (line 40) | @Override
method doGetAuthenticationInfo (line 69) | @Override
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/util/MD5Utils.java
class MD5Utils (line 6) | public class MD5Utils {
method encrypt (line 13) | public static String encrypt(String pswd) {
method encrypt (line 18) | public static String encrypt(String username, String pswd) {
method main (line 23) | public static void main(String[] args) {
FILE: 13.Spring-Boot-Shiro-Authorization/src/main/resources/init.sql
type T_PERMISSION (line 4) | CREATE TABLE T_PERMISSION (
type T_ROLE (line 20) | CREATE TABLE T_ROLE (
type T_ROLE_PERMISSION (line 35) | CREATE TABLE T_ROLE_PERMISSION (
type T_USER (line 51) | CREATE TABLE T_USER (
type T_USER_ROLE (line 70) | CREATE TABLE T_USER_ROLE (
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/config/ShiroConfig.java
class ShiroConfig (line 22) | @Configuration
method shiroFilterFactoryBean (line 25) | @Bean
method securityManager (line 48) | @Bean
method lifecycleBeanPostProcessor (line 57) | @Bean(name = "lifecycleBeanPostProcessor")
method shiroRealm (line 62) | @Bean
method rememberMeCookie (line 68) | public SimpleCookie rememberMeCookie() {
method rememberMeManager (line 74) | public CookieRememberMeManager rememberMeManager() {
method advisorAutoProxyCreator (line 81) | @Bean
method authorizationAttributeSourceAdvisor (line 89) | @Bean
method redisManager (line 96) | public RedisManager redisManager() {
method cacheManager (line 101) | public RedisCacheManager cacheManager() {
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/controller/LoginController.java
class LoginController (line 21) | @Controller
method login (line 24) | @GetMapping("/login")
method login (line 29) | @PostMapping("/login")
method redirectIndex (line 49) | @RequestMapping("/")
method forbid (line 54) | @GetMapping("/403")
method index (line 59) | @RequestMapping("/index")
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/controller/UserController.java
class UserController (line 8) | @Controller
method userList (line 13) | @RequiresPermissions("user:user")
method userAdd (line 20) | @RequiresPermissions("user:add")
method userDelete (line 27) | @RequiresPermissions("user:delete")
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/dao/UserMapper.java
type UserMapper (line 7) | @Mapper
method findByUserName (line 9) | User findByUserName(String userName);
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/dao/UserPermissionMapper.java
type UserPermissionMapper (line 7) | @Mapper
method findByUserName (line 10) | List<Permission> findByUserName(String userName);
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/dao/UserRoleMapper.java
type UserRoleMapper (line 8) | @Mapper
method findByUserName (line 11) | List<Role> findByUserName(String userName);
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/handler/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 10) | @ControllerAdvice
method handleAuthorizationException (line 14) | @ExceptionHandler(value = AuthorizationException.class)
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/pojo/Permission.java
class Permission (line 5) | public class Permission implements Serializable{
method getId (line 11) | public Integer getId() {
method setId (line 14) | public void setId(Integer id) {
method getUrl (line 17) | public String getUrl() {
method setUrl (line 20) | public void setUrl(String url) {
method getName (line 23) | public String getName() {
method setName (line 26) | public void setName(String name) {
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/pojo/ResponseBo.java
class ResponseBo (line 6) | public class ResponseBo extends HashMap<String, Object>{
method ResponseBo (line 9) | public ResponseBo() {
method error (line 14) | public static ResponseBo error() {
method error (line 18) | public static ResponseBo error(String msg) {
method error (line 22) | public static ResponseBo error(int code, String msg) {
method ok (line 29) | public static ResponseBo ok(String msg) {
method ok (line 35) | public static ResponseBo ok(Map<String, Object> map) {
method ok (line 41) | public static ResponseBo ok() {
method put (line 45) | @Override
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/pojo/Role.java
class Role (line 5) | public class Role implements Serializable{
method getId (line 11) | public Integer getId() {
method setId (line 14) | public void setId(Integer id) {
method getName (line 17) | public String getName() {
method setName (line 20) | public void setName(String name) {
method getMemo (line 23) | public String getMemo() {
method setMemo (line 26) | public void setMemo(String memo) {
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/pojo/User.java
class User (line 6) | public class User implements Serializable{
method getId (line 15) | public Integer getId() {
method setId (line 18) | public void setId(Integer id) {
method getUserName (line 21) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 27) | public String getPassword() {
method setPassword (line 30) | public void setPassword(String password) {
method getCreateTime (line 33) | public Date getCreateTime() {
method setCreateTime (line 36) | public void setCreateTime(Date createTime) {
method getStatus (line 39) | public String getStatus() {
method setStatus (line 42) | public void setStatus(String status) {
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/shiro/ShiroRealm.java
class ShiroRealm (line 28) | public class ShiroRealm extends AuthorizingRealm {
method doGetAuthorizationInfo (line 40) | @Override
method doGetAuthenticationInfo (line 69) | @Override
FILE: 14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/util/MD5Utils.java
class MD5Utils (line 6) | public class MD5Utils {
method encrypt (line 13) | public static String encrypt(String pswd) {
method encrypt (line 18) | public static String encrypt(String username, String pswd) {
method main (line 23) | public static void main(String[] args) {
FILE: 14.Spring-Boot-Shiro-Redis/src/main/resources/init.sql
type T_PERMISSION (line 4) | CREATE TABLE T_PERMISSION (
type T_ROLE (line 20) | CREATE TABLE T_ROLE (
type T_ROLE_PERMISSION (line 35) | CREATE TABLE T_ROLE_PERMISSION (
type T_USER (line 51) | CREATE TABLE T_USER (
type T_USER_ROLE (line 70) | CREATE TABLE T_USER_ROLE (
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/config/ShiroConfig.java
class ShiroConfig (line 21) | @Configuration
method getEhCacheManager (line 24) | @Bean
method shiroFilterFactoryBean (line 31) | @Bean
method securityManager (line 54) | @Bean
method lifecycleBeanPostProcessor (line 63) | @Bean(name = "lifecycleBeanPostProcessor")
method shiroRealm (line 68) | @Bean
method rememberMeCookie (line 74) | public SimpleCookie rememberMeCookie() {
method rememberMeManager (line 80) | public CookieRememberMeManager rememberMeManager() {
method advisorAutoProxyCreator (line 87) | @Bean
method authorizationAttributeSourceAdvisor (line 95) | @Bean
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/controller/LoginController.java
class LoginController (line 21) | @Controller
method login (line 24) | @GetMapping("/login")
method login (line 29) | @PostMapping("/login")
method redirectIndex (line 49) | @RequestMapping("/")
method forbid (line 54) | @GetMapping("/403")
method index (line 59) | @RequestMapping("/index")
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/controller/UserController.java
class UserController (line 8) | @Controller
method userList (line 13) | @RequiresPermissions("user:user")
method userAdd (line 20) | @RequiresPermissions("user:add")
method userDelete (line 27) | @RequiresPermissions("user:delete")
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/dao/UserMapper.java
type UserMapper (line 7) | @Mapper
method findByUserName (line 9) | User findByUserName(String userName);
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/dao/UserPermissionMapper.java
type UserPermissionMapper (line 7) | @Mapper
method findByUserName (line 10) | List<Permission> findByUserName(String userName);
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/dao/UserRoleMapper.java
type UserRoleMapper (line 8) | @Mapper
method findByUserName (line 11) | List<Role> findByUserName(String userName);
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/handler/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 10) | @ControllerAdvice
method handleAuthorizationException (line 14) | @ExceptionHandler(value = AuthorizationException.class)
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/pojo/Permission.java
class Permission (line 5) | public class Permission implements Serializable{
method getId (line 11) | public Integer getId() {
method setId (line 14) | public void setId(Integer id) {
method getUrl (line 17) | public String getUrl() {
method setUrl (line 20) | public void setUrl(String url) {
method getName (line 23) | public String getName() {
method setName (line 26) | public void setName(String name) {
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/pojo/ResponseBo.java
class ResponseBo (line 6) | public class ResponseBo extends HashMap<String, Object>{
method ResponseBo (line 9) | public ResponseBo() {
method error (line 14) | public static ResponseBo error() {
method error (line 18) | public static ResponseBo error(String msg) {
method error (line 22) | public static ResponseBo error(int code, String msg) {
method ok (line 29) | public static ResponseBo ok(String msg) {
method ok (line 35) | public static ResponseBo ok(Map<String, Object> map) {
method ok (line 41) | public static ResponseBo ok() {
method put (line 45) | @Override
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/pojo/Role.java
class Role (line 5) | public class Role implements Serializable{
method getId (line 11) | public Integer getId() {
method setId (line 14) | public void setId(Integer id) {
method getName (line 17) | public String getName() {
method setName (line 20) | public void setName(String name) {
method getMemo (line 23) | public String getMemo() {
method setMemo (line 26) | public void setMemo(String memo) {
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/pojo/User.java
class User (line 6) | public class User implements Serializable{
method getId (line 15) | public Integer getId() {
method setId (line 18) | public void setId(Integer id) {
method getUserName (line 21) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 27) | public String getPassword() {
method setPassword (line 30) | public void setPassword(String password) {
method getCreateTime (line 33) | public Date getCreateTime() {
method setCreateTime (line 36) | public void setCreateTime(Date createTime) {
method getStatus (line 39) | public String getStatus() {
method setStatus (line 42) | public void setStatus(String status) {
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/shiro/ShiroRealm.java
class ShiroRealm (line 28) | public class ShiroRealm extends AuthorizingRealm {
method doGetAuthorizationInfo (line 40) | @Override
method doGetAuthenticationInfo (line 69) | @Override
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/util/MD5Utils.java
class MD5Utils (line 6) | public class MD5Utils {
method encrypt (line 13) | public static String encrypt(String pswd) {
method encrypt (line 18) | public static String encrypt(String username, String pswd) {
method main (line 23) | public static void main(String[] args) {
FILE: 15.Spring-Boot-Shiro-Ehcache/src/main/resources/init.sql
type T_PERMISSION (line 4) | CREATE TABLE T_PERMISSION (
type T_ROLE (line 20) | CREATE TABLE T_ROLE (
type T_ROLE_PERMISSION (line 35) | CREATE TABLE T_ROLE_PERMISSION (
type T_USER (line 51) | CREATE TABLE T_USER (
type T_USER_ROLE (line 70) | CREATE TABLE T_USER_ROLE (
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/config/ShiroConfig.java
class ShiroConfig (line 23) | @Configuration
method getEhCacheManager (line 26) | @Bean
method shiroFilterFactoryBean (line 33) | @Bean
method securityManager (line 56) | @Bean
method lifecycleBeanPostProcessor (line 65) | @Bean(name = "lifecycleBeanPostProcessor")
method shiroRealm (line 70) | @Bean
method rememberMeCookie (line 76) | public SimpleCookie rememberMeCookie() {
method rememberMeManager (line 82) | public CookieRememberMeManager rememberMeManager() {
method advisorAutoProxyCreator (line 89) | @Bean
method authorizationAttributeSourceAdvisor (line 97) | @Bean
method shiroDialect (line 104) | @Bean
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/controller/LoginController.java
class LoginController (line 21) | @Controller
method login (line 24) | @GetMapping("/login")
method login (line 29) | @PostMapping("/login")
method redirectIndex (line 49) | @RequestMapping("/")
method forbid (line 54) | @GetMapping("/403")
method index (line 59) | @RequestMapping("/index")
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/controller/UserController.java
class UserController (line 8) | @Controller
method userList (line 13) | @RequiresPermissions("user:user")
method userAdd (line 20) | @RequiresPermissions("user:add")
method userDelete (line 27) | @RequiresPermissions("user:delete")
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/dao/UserMapper.java
type UserMapper (line 7) | @Mapper
method findByUserName (line 9) | User findByUserName(String userName);
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/dao/UserPermissionMapper.java
type UserPermissionMapper (line 7) | @Mapper
method findByUserName (line 10) | List<Permission> findByUserName(String userName);
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/dao/UserRoleMapper.java
type UserRoleMapper (line 8) | @Mapper
method findByUserName (line 11) | List<Role> findByUserName(String userName);
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/handler/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 10) | @ControllerAdvice
method handleAuthorizationException (line 14) | @ExceptionHandler(value = AuthorizationException.class)
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/pojo/Permission.java
class Permission (line 5) | public class Permission implements Serializable{
method getId (line 11) | public Integer getId() {
method setId (line 14) | public void setId(Integer id) {
method getUrl (line 17) | public String getUrl() {
method setUrl (line 20) | public void setUrl(String url) {
method getName (line 23) | public String getName() {
method setName (line 26) | public void setName(String name) {
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/pojo/ResponseBo.java
class ResponseBo (line 6) | public class ResponseBo extends HashMap<String, Object>{
method ResponseBo (line 9) | public ResponseBo() {
method error (line 14) | public static ResponseBo error() {
method error (line 18) | public static ResponseBo error(String msg) {
method error (line 22) | public static ResponseBo error(int code, String msg) {
method ok (line 29) | public static ResponseBo ok(String msg) {
method ok (line 35) | public static ResponseBo ok(Map<String, Object> map) {
method ok (line 41) | public static ResponseBo ok() {
method put (line 45) | @Override
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/pojo/Role.java
class Role (line 5) | public class Role implements Serializable{
method getId (line 11) | public Integer getId() {
method setId (line 14) | public void setId(Integer id) {
method getName (line 17) | public String getName() {
method setName (line 20) | public void setName(String name) {
method getMemo (line 23) | public String getMemo() {
method setMemo (line 26) | public void setMemo(String memo) {
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/pojo/User.java
class User (line 6) | public class User implements Serializable{
method getId (line 15) | public Integer getId() {
method setId (line 18) | public void setId(Integer id) {
method getUserName (line 21) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 27) | public String getPassword() {
method setPassword (line 30) | public void setPassword(String password) {
method getCreateTime (line 33) | public Date getCreateTime() {
method setCreateTime (line 36) | public void setCreateTime(Date createTime) {
method getStatus (line 39) | public String getStatus() {
method setStatus (line 42) | public void setStatus(String status) {
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/shiro/ShiroRealm.java
class ShiroRealm (line 28) | public class ShiroRealm extends AuthorizingRealm {
method doGetAuthorizationInfo (line 40) | @Override
method doGetAuthenticationInfo (line 69) | @Override
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/java/com/springboot/util/MD5Utils.java
class MD5Utils (line 6) | public class MD5Utils {
method encrypt (line 13) | public static String encrypt(String pswd) {
method encrypt (line 18) | public static String encrypt(String username, String pswd) {
method main (line 23) | public static void main(String[] args) {
FILE: 16.Spring-Boot-Shiro-Thymeleaf-Tag/src/main/resources/init.sql
type T_PERMISSION (line 4) | CREATE TABLE T_PERMISSION (
type T_ROLE (line 20) | CREATE TABLE T_ROLE (
type T_ROLE_PERMISSION (line 35) | CREATE TABLE T_ROLE_PERMISSION (
type T_USER (line 51) | CREATE TABLE T_USER (
type T_USER_ROLE (line 70) | CREATE TABLE T_USER_ROLE (
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/Application.java
class Application (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/config/ShiroConfig.java
class ShiroConfig (line 31) | @Configuration
method getEhCacheManager (line 34) | @Bean
method shiroFilterFactoryBean (line 41) | @Bean
method securityManager (line 64) | @Bean
method lifecycleBeanPostProcessor (line 74) | @Bean(name = "lifecycleBeanPostProcessor")
method shiroRealm (line 79) | @Bean
method rememberMeCookie (line 85) | public SimpleCookie rememberMeCookie() {
method rememberMeManager (line 91) | public CookieRememberMeManager rememberMeManager() {
method advisorAutoProxyCreator (line 98) | @Bean
method authorizationAttributeSourceAdvisor (line 106) | @Bean
method shiroDialect (line 113) | @Bean
method sessionDAO (line 118) | @Bean
method sessionManager (line 124) | @Bean
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/controller/LoginController.java
class LoginController (line 21) | @Controller
method login (line 24) | @GetMapping("/login")
method login (line 29) | @PostMapping("/login")
method redirectIndex (line 49) | @RequestMapping("/")
method forbid (line 54) | @GetMapping("/403")
method index (line 59) | @RequestMapping("/index")
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/controller/SessionController.java
class SessionController (line 15) | @Controller
method online (line 22) | @RequestMapping("index")
method list (line 27) | @ResponseBody
method forceLogout (line 33) | @ResponseBody
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/controller/UserController.java
class UserController (line 8) | @Controller
method userList (line 13) | @RequiresPermissions("user:user")
method userAdd (line 20) | @RequiresPermissions("user:add")
method userDelete (line 27) | @RequiresPermissions("user:delete")
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/dao/UserMapper.java
type UserMapper (line 7) | @Mapper
method findByUserName (line 9) | User findByUserName(String userName);
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/dao/UserPermissionMapper.java
type UserPermissionMapper (line 7) | @Mapper
method findByUserName (line 10) | List<Permission> findByUserName(String userName);
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/dao/UserRoleMapper.java
type UserRoleMapper (line 8) | @Mapper
method findByUserName (line 11) | List<Role> findByUserName(String userName);
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/handler/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 11) | @ControllerAdvice
method handleAuthorizationException (line 15) | @ExceptionHandler(value = AuthorizationException.class)
method handleExpiredSessionException (line 20) | @ExceptionHandler(value = ExpiredSessionException.class )
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/listener/ShiroSessionListener.java
class ShiroSessionListener (line 8) | public class ShiroSessionListener implements SessionListener{
method onStart (line 12) | @Override
method onStop (line 17) | @Override
method onExpiration (line 23) | @Override
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/pojo/Permission.java
class Permission (line 5) | public class Permission implements Serializable{
method getId (line 11) | public Integer getId() {
method setId (line 14) | public void setId(Integer id) {
method getUrl (line 17) | public String getUrl() {
method setUrl (line 20) | public void setUrl(String url) {
method getName (line 23) | public String getName() {
method setName (line 26) | public void setName(String name) {
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/pojo/ResponseBo.java
class ResponseBo (line 6) | public class ResponseBo extends HashMap<String, Object>{
method ResponseBo (line 9) | public ResponseBo() {
method error (line 14) | public static ResponseBo error() {
method error (line 18) | public static ResponseBo error(String msg) {
method error (line 22) | public static ResponseBo error(int code, String msg) {
method ok (line 29) | public static ResponseBo ok(String msg) {
method ok (line 35) | public static ResponseBo ok(Map<String, Object> map) {
method ok (line 41) | public static ResponseBo ok() {
method put (line 45) | @Override
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/pojo/Role.java
class Role (line 5) | public class Role implements Serializable{
method getId (line 11) | public Integer getId() {
method setId (line 14) | public void setId(Integer id) {
method getName (line 17) | public String getName() {
method setName (line 20) | public void setName(String name) {
method getMemo (line 23) | public String getMemo() {
method setMemo (line 26) | public void setMemo(String memo) {
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/pojo/User.java
class User (line 6) | public class User implements Serializable{
method getId (line 15) | public Integer getId() {
method setId (line 18) | public void setId(Integer id) {
method getUserName (line 21) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 27) | public String getPassword() {
method setPassword (line 30) | public void setPassword(String password) {
method getCreateTime (line 33) | public Date getCreateTime() {
method setCreateTime (line 36) | public void setCreateTime(Date createTime) {
method getStatus (line 39) | public String getStatus() {
method setStatus (line 42) | public void setStatus(String status) {
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/pojo/UserOnline.java
class UserOnline (line 6) | public class UserOnline implements Serializable{
method getId (line 30) | public String getId() {
method setId (line 34) | public void setId(String id) {
method getUserId (line 38) | public String getUserId() {
method setUserId (line 42) | public void setUserId(String userId) {
method getUsername (line 46) | public String getUsername() {
method setUsername (line 50) | public void setUsername(String username) {
method getHost (line 54) | public String getHost() {
method setHost (line 58) | public void setHost(String host) {
method getSystemHost (line 62) | public String getSystemHost() {
method setSystemHost (line 66) | public void setSystemHost(String systemHost) {
method getStatus (line 70) | public String getStatus() {
method setStatus (line 74) | public void setStatus(String status) {
method getStartTimestamp (line 78) | public Date getStartTimestamp() {
method setStartTimestamp (line 82) | public void setStartTimestamp(Date startTimestamp) {
method getLastAccessTime (line 86) | public Date getLastAccessTime() {
method setLastAccessTime (line 90) | public void setLastAccessTime(Date lastAccessTime) {
method getTimeout (line 94) | public Long getTimeout() {
method setTimeout (line 98) | public void setTimeout(Long timeout) {
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/service/SessionService.java
type SessionService (line 7) | public interface SessionService {
method list (line 9) | List<UserOnline> list();
method forceLogout (line 10) | boolean forceLogout(String sessionId);
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/service/impl/SessionServiceImpl.java
class SessionServiceImpl (line 18) | @Service("sessionService")
method list (line 24) | @Override
method forceLogout (line 57) | @Override
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/shiro/ShiroRealm.java
class ShiroRealm (line 28) | public class ShiroRealm extends AuthorizingRealm {
method doGetAuthorizationInfo (line 40) | @Override
method doGetAuthenticationInfo (line 69) | @Override
FILE: 17.Spring-Boot-Shiro-Session/src/main/java/com/springboot/util/MD5Utils.java
class MD5Utils (line 6) | public class MD5Utils {
method encrypt (line 13) | public static String encrypt(String pswd) {
method encrypt (line 18) | public static String encrypt(String username, String pswd) {
method main (line 23) | public static void main(String[] args) {
FILE: 17.Spring-Boot-Shiro-Session/src/main/resources/init.sql
type T_PERMISSION (line 4) | CREATE TABLE T_PERMISSION (
type T_ROLE (line 20) | CREATE TABLE T_ROLE (
type T_ROLE_PERMISSION (line 35) | CREATE TABLE T_ROLE_PERMISSION (
type T_USER (line 51) | CREATE TABLE T_USER (
type T_USER_ROLE (line 70) | CREATE TABLE T_USER_ROLE (
FILE: 18.Spring-Boot-Jackson/src/main/java/com/example/DemoApplication.java
class DemoApplication (line 10) | @SpringBootApplication
method main (line 13) | public static void main(String[] args) throws JsonProcessingException,...
FILE: 18.Spring-Boot-Jackson/src/main/java/com/example/config/JacksonConfig.java
class JacksonConfig (line 10) | @Configuration
method getObjectMapper (line 12) | @Bean
FILE: 18.Spring-Boot-Jackson/src/main/java/com/example/config/UserDeserializer.java
class UserDeserializer (line 12) | public class UserDeserializer extends JsonDeserializer<User> {
method deserialize (line 14) | @Override
FILE: 18.Spring-Boot-Jackson/src/main/java/com/example/config/UserSerializer.java
class UserSerializer (line 11) | public class UserSerializer extends JsonSerializer<User> {
method serialize (line 13) | @Override
FILE: 18.Spring-Boot-Jackson/src/main/java/com/example/controller/TestJsonController.java
class TestJsonController (line 21) | @Controller
method getUser (line 27) | @JsonView(User.AllUserFieldView.class)
method serialization (line 39) | @RequestMapping("serialization")
method readJsonString (line 54) | @RequestMapping("readjsonstring")
method readJsonAsObject (line 69) | @RequestMapping("readjsonasobject")
method formatObjectToJsonString (line 83) | @RequestMapping("formatobjecttojsonstring")
method updateUser (line 100) | @RequestMapping("updateuser")
method customize (line 106) | @RequestMapping("customize")
FILE: 18.Spring-Boot-Jackson/src/main/java/com/example/pojo/User.java
class User (line 22) | public class User implements Serializable {
type UserNameView (line 26) | public interface UserNameView {
type AllUserFieldView (line 29) | public interface AllUserFieldView extends UserNameView {
method getUserName (line 47) | public String getUserName() {
method setUserName (line 51) | public void setUserName(String userName) {
method getAge (line 55) | public int getAge() {
method getPassword (line 59) | public String getPassword() {
method setPassword (line 63) | public void setPassword(String password) {
method setAge (line 67) | public void setAge(int age) {
method getBirthday (line 71) | public Date getBirthday() {
method setBirthday (line 75) | public void setBirthday(Date birthday) {
FILE: 18.Spring-Boot-Jackson/src/test/java/com/example/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 19.Spring-Boot-Testing/src/main/java/demo/springboot/test/TestApplication.java
class TestApplication (line 8) | @SpringBootApplication
method main (line 13) | public static void main(String[] args) {
FILE: 19.Spring-Boot-Testing/src/main/java/demo/springboot/test/config/MyMapper.java
type MyMapper (line 6) | public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
FILE: 19.Spring-Boot-Testing/src/main/java/demo/springboot/test/controller/UserController.java
class UserController (line 13) | @RestController
method getUserByName (line 19) | @GetMapping("user/{userName}")
method saveUser (line 24) | @PostMapping("user/save")
FILE: 19.Spring-Boot-Testing/src/main/java/demo/springboot/test/domain/User.java
class User (line 9) | @Table(name = "T_USER")
method getId (line 30) | public Long getId() {
method setId (line 37) | public void setId(Long id) {
method getUsername (line 44) | public String getUsername() {
method setUsername (line 51) | public void setUsername(String username) {
method getPasswd (line 58) | public String getPasswd() {
method setPasswd (line 65) | public void setPasswd(String passwd) {
method getCreateTime (line 72) | public Date getCreateTime() {
method setCreateTime (line 79) | public void setCreateTime(Date createTime) {
method getStatus (line 86) | public String getStatus() {
method setStatus (line 93) | public void setStatus(String status) {
FILE: 19.Spring-Boot-Testing/src/main/java/demo/springboot/test/mapper/SeqenceMapper.java
type SeqenceMapper (line 6) | public interface SeqenceMapper {
method getSequence (line 7) | @Select("select ${seqName}.nextval from dual")
FILE: 19.Spring-Boot-Testing/src/main/java/demo/springboot/test/mapper/UserMapper.java
type UserMapper (line 6) | public interface UserMapper extends MyMapper<User> {
FILE: 19.Spring-Boot-Testing/src/main/java/demo/springboot/test/service/IService.java
type IService (line 8) | @Service
method getSequence (line 11) | Long getSequence(@Param("seqName") String seqName);
method selectAll (line 13) | List<T> selectAll();
method selectByKey (line 15) | T selectByKey(Object key);
method save (line 17) | int save(T entity);
method delete (line 19) | int delete(Object key);
method updateAll (line 21) | int updateAll(T entity);
method updateNotNull (line 23) | int updateNotNull(T entity);
method selectByExample (line 25) | List<T> selectByExample(Object example);
FILE: 19.Spring-Boot-Testing/src/main/java/demo/springboot/test/service/UserService.java
type UserService (line 5) | public interface UserService extends IService<User>{
method findByName (line 6) | User findByName(String userName);
method saveUser (line 8) | void saveUser(User user);
FILE: 19.Spring-Boot-Testing/src/main/java/demo/springboot/test/service/impl/BaseService.java
class BaseService (line 12) | public abstract class BaseService<T> implements IService<T> {
method getMapper (line 19) | public Mapper<T> getMapper() {
method getSequence (line 22) | @Override
method selectAll (line 27) | @Override
method selectByKey (line 33) | @Override
method save (line 39) | @Override
method delete (line 45) | @Override
method updateAll (line 51) | @Override
method updateNotNull (line 57) | @Override
method selectByExample (line 63) | @Override
FILE: 19.Spring-Boot-Testing/src/main/java/demo/springboot/test/service/impl/UserServiceImpl.java
class UserServiceImpl (line 12) | @Repository("userService")
method findByName (line 15) | @Override
method saveUser (line 26) | @Override
FILE: 19.Spring-Boot-Testing/src/main/resources/init.sql
type T_USER (line 4) | CREATE TABLE T_USER (
FILE: 19.Spring-Boot-Testing/src/test/java/demo/springboot/test/UserControllerTest.java
class UserControllerTest (line 26) | @RunWith(SpringRunner.class)
method setupMockMvc (line 40) | @Before
method test (line 50) | @Test
FILE: 20.Spring-Boot-Swagger2/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 20.Spring-Boot-Swagger2/src/main/java/com/example/demo/config/SwaggerConfig.java
class SwaggerConfig (line 15) | @Configuration
method buildDocket (line 19) | @Bean
method buildApiInf (line 28) | private ApiInfo buildApiInf() {
FILE: 20.Spring-Boot-Swagger2/src/main/java/com/example/demo/config/WebConfig.java
class WebConfig (line 10) | @Configuration
method getObjectMapper (line 12) | @Bean
FILE: 20.Spring-Boot-Swagger2/src/main/java/com/example/demo/controller/UserController.java
class UserController (line 26) | @Api(value = "用户Controller")
method hello (line 31) | @ApiIgnore
method getUserById (line 37) | @ApiOperation(value = "获取用户信息", notes = "根据用户id获取用户信息")
method getUserList (line 48) | @ApiOperation(value = "获取用户列表", notes = "获取用户列表")
method addUser (line 65) | @ApiOperation(value = "新增用户", notes = "根据用户实体创建用户")
method deleteUser (line 74) | @ApiOperation(value = "删除用户", notes = "根据用户id删除用户")
method updateUser (line 83) | @ApiOperation(value = "更新用户", notes = "根据用户id更新用户")
FILE: 20.Spring-Boot-Swagger2/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method getId (line 13) | public Long getId() {
method setId (line 17) | public void setId(Long id) {
method getName (line 21) | public String getName() {
method setName (line 25) | public void setName(String name) {
method getAge (line 29) | public Integer getAge() {
method setAge (line 33) | public void setAge(Integer age) {
FILE: 20.Spring-Boot-Swagger2/src/test/java/com/example/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 21.Spring-Boot-Actuator/src/main/java/com/springboot/demo/DemoApplication.java
class DemoApplication (line 8) | @RestController
method index (line 12) | @RequestMapping("/")
method main (line 17) | public static void main(String[] args) {
FILE: 21.Spring-Boot-Actuator/src/test/java/com/springboot/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 22.Spring-Boot-Email/src/main/java/com/springboot/demo/DemoApplication.java
class DemoApplication (line 6) | @SpringBootApplication
method main (line 8) | public static void main(String[] args) {
FILE: 22.Spring-Boot-Email/src/main/java/com/springboot/demo/controller/EmailController.java
class EmailController (line 18) | @RestController
method sendSimpleEmail (line 31) | @RequestMapping("sendSimpleEmail")
method sendHtmlEmail (line 47) | @RequestMapping("sendHtmlEmail")
method sendAttachmentsMail (line 67) | @RequestMapping("sendAttachmentsMail")
method sendInlineMail (line 88) | @RequestMapping("sendInlineMail")
method sendTemplateEmail (line 109) | @RequestMapping("sendTemplateEmail")
FILE: 22.Spring-Boot-Email/src/test/java/com/springboot/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 23.Spring-Boot-Admin/Spring Boot Admin Client/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 23.Spring-Boot-Admin/Spring Boot Admin Client/src/test/java/com/example/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 23.Spring-Boot-Admin/Spring Boot Admin Server/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 9) | @SpringBootApplication
method main (line 14) | public static void main(String[] args) {
FILE: 23.Spring-Boot-Admin/Spring Boot Admin Server/src/test/java/com/example/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 24.Spring-Boot-Devtools/src/main/java/com/springboot/demo/DemoApplication.java
class DemoApplication (line 8) | @RestController
method index (line 12) | @RequestMapping("/")
method main (line 17) | public static void main(String[] args) {
FILE: 24.Spring-Boot-Devtools/src/test/java/com/springboot/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 25.Spring-Boot-Exception/src/main/java/cc/mrbird/Application.java
class Application (line 6) | @SpringBootApplication
method main (line 8) | public static void main(String[] args) {
FILE: 25.Spring-Boot-Exception/src/main/java/cc/mrbird/controller/UserController.java
class UserController (line 9) | @RestController
method get (line 13) | @GetMapping("/{id:\\d+}")
FILE: 25.Spring-Boot-Exception/src/main/java/cc/mrbird/exception/UserNotExistException.java
class UserNotExistException (line 3) | public class UserNotExistException extends RuntimeException{
method UserNotExistException (line 8) | public UserNotExistException(String id){
method getId (line 13) | public String getId() {
method setId (line 17) | public void setId(String id) {
FILE: 25.Spring-Boot-Exception/src/main/java/cc/mrbird/handler/ControllerExceptionHandler.java
class ControllerExceptionHandler (line 13) | @ControllerAdvice
method handleUserNotExistsException (line 16) | @ExceptionHandler(UserNotExistException.class)
FILE: 25.Spring-Boot-Exception/src/test/java/cc/mrbird/cc/mrbird/demo/ApplicationTests.java
class ApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 26.Spring-Boot-Filter-Interceptor/src/main/java/cc/mrbird/Application.java
class Application (line 6) | @SpringBootApplication
method main (line 8) | public static void main(String[] args) {
FILE: 26.Spring-Boot-Filter-Interceptor/src/main/java/cc/mrbird/config/WebConfig.java
class WebConfig (line 15) | @Configuration
method timeFilter (line 17) | @Bean
method addInterceptors (line 33) | @Override
FILE: 26.Spring-Boot-Filter-Interceptor/src/main/java/cc/mrbird/controller/UserController.java
class UserController (line 8) | @RestController
method get (line 12) | @GetMapping("/{id:\\d+}")
FILE: 26.Spring-Boot-Filter-Interceptor/src/main/java/cc/mrbird/filter/TimeFilter.java
class TimeFilter (line 12) | public class TimeFilter implements Filter {
method init (line 13) | @Override
method doFilter (line 18) | @Override
method destroy (line 27) | @Override
FILE: 26.Spring-Boot-Filter-Interceptor/src/main/java/cc/mrbird/interceptor/TimeInterceptor.java
class TimeInterceptor (line 12) | @Component
method preHandle (line 14) | @Override
method postHandle (line 23) | @Override
method afterCompletion (line 30) | @Override
FILE: 26.Spring-Boot-Filter-Interceptor/src/test/java/cc/mrbird/cc/mrbird/demo/ApplicationTests.java
class ApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 27.Spring-Boot-Mapper-PageHelper/src/main/java/com/springboot/Application.java
class Application (line 8) | @SpringBootApplication
method main (line 12) | public static void main(String[] args) {
FILE: 27.Spring-Boot-Mapper-PageHelper/src/main/java/com/springboot/ApplicationTest.java
class ApplicationTest (line 19) | @RunWith(SpringJUnit4ClassRunner.class)
method test (line 26) | @Test
FILE: 27.Spring-Boot-Mapper-PageHelper/src/main/java/com/springboot/bean/User.java
class User (line 9) | @Table(name = "T_USER")
method getId (line 30) | public Long getId() {
method setId (line 37) | public void setId(Long id) {
method getUsername (line 44) | public String getUsername() {
method setUsername (line 51) | public void setUsername(String username) {
method getPasswd (line 58) | public String getPasswd() {
method setPasswd (line 65) | public void setPasswd(String passwd) {
method getCreateTime (line 72) | public Date getCreateTime() {
method setCreateTime (line 79) | public void setCreateTime(Date createTime) {
method getStatus (line 86) | public String getStatus() {
method setStatus (line 93) | public void setStatus(String status) {
FILE: 27.Spring-Boot-Mapper-PageHelper/src/main/java/com/springboot/config/MyMapper.java
type MyMapper (line 6) | public interface MyMapper<T> extends Mapper<T>, MySqlMapper<T> {
FILE: 27.Spring-Boot-Mapper-PageHelper/src/main/java/com/springboot/mapper/SeqenceMapper.java
type SeqenceMapper (line 6) | public interface SeqenceMapper {
method getSequence (line 7) | @Select("select ${seqName}.nextval from dual")
FILE: 27.Spring-Boot-Mapper-PageHelper/src/main/java/com/springboot/mapper/UserMapper.java
type UserMapper (line 6) | public interface UserMapper extends MyMapper<User> {
FILE: 27.Spring-Boot-Mapper-PageHelper/src/main/java/com/springboot/service/IService.java
type IService (line 8) | @Service
method getSequence (line 11) | Long getSequence(@Param("seqName") String seqName);
method selectAll (line 13) | List<T> selectAll();
method selectByKey (line 15) | T selectByKey(Object key);
method save (line 17) | int save(T entity);
method delete (line 19) | int delete(Object key);
method updateAll (line 21) | int updateAll(T entity);
method updateNotNull (line 23) | int updateNotNull(T entity);
method selectByExample (line 25) | List<T> selectByExample(Object example);
FILE: 27.Spring-Boot-Mapper-PageHelper/src/main/java/com/springboot/service/UserService.java
type UserService (line 5) | public interface UserService extends IService<User>{
FILE: 27.Spring-Boot-Mapper-PageHelper/src/main/java/com/springboot/service/impl/BaseService.java
class BaseService (line 13) | public abstract class BaseService<T> implements IService<T> {
method getMapper (line 20) | public Mapper<T> getMapper() {
method getSequence (line 23) | @Override
method selectAll (line 28) | @Override
method selectByKey (line 34) | @Override
method save (line 40) | @Override
method delete (line 46) | @Override
method updateAll (line 52) | @Override
method updateNotNull (line 58) | @Override
method selectByExample (line 64) | @Override
FILE: 27.Spring-Boot-Mapper-PageHelper/src/main/java/com/springboot/service/impl/UserServiceImpl.java
class UserServiceImpl (line 8) | @Repository("userService")
FILE: 28.Spring-Cloud-Eureka-Server-Discovery/Eureka-Client/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 7) | @EnableDiscoveryClient
method main (line 11) | public static void main(String[] args) {
FILE: 28.Spring-Cloud-Eureka-Server-Discovery/Eureka-Client/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 11) | @RestController
method info (line 19) | @GetMapping("/info")
method hello (line 28) | @GetMapping("/hello")
FILE: 28.Spring-Cloud-Eureka-Server-Discovery/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableEurekaServer
method main (line 11) | public static void main(String[] args) {
FILE: 28.Spring-Cloud-Eureka-Server-Discovery/Server-Consumer/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 10) | @EnableDiscoveryClient
method restTemplate (line 14) | @Bean
method main (line 20) | public static void main(String[] args) {
FILE: 28.Spring-Cloud-Eureka-Server-Discovery/Server-Consumer/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 8) | @RestController
method getInfo (line 14) | @GetMapping("/info")
FILE: 29.Spring-Cloud-Ribbon-LoadBalance/Eureka-Client/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableDiscoveryClient
method main (line 12) | public static void main(String[] args) {
FILE: 29.Spring-Cloud-Ribbon-LoadBalance/Eureka-Client/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 11) | @RestController
method info (line 19) | @GetMapping("/info")
method hello (line 28) | @GetMapping("/hello")
FILE: 29.Spring-Cloud-Ribbon-LoadBalance/Eureka-Client/src/main/java/com/example/demo/controller/UserController.java
class UserController (line 11) | @RestController
method get (line 17) | @GetMapping("/{id:\\d+}")
method get (line 23) | @GetMapping
method add (line 32) | @PostMapping
method update (line 37) | @PutMapping
method delete (line 42) | @DeleteMapping("/{id:\\d+}")
FILE: 29.Spring-Cloud-Ribbon-LoadBalance/Eureka-Client/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method User (line 14) | public User() {
method User (line 17) | public User(Long id, String username, String password) {
method getId (line 23) | public Long getId() {
method setId (line 27) | public void setId(Long id) {
method getUsername (line 31) | public String getUsername() {
method setUsername (line 35) | public void setUsername(String username) {
method getPassword (line 39) | public String getPassword() {
method setPassword (line 43) | public void setPassword(String password) {
method toString (line 47) | @Override
FILE: 29.Spring-Cloud-Ribbon-LoadBalance/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableEurekaServer
method main (line 11) | public static void main(String[] args) {
FILE: 29.Spring-Cloud-Ribbon-LoadBalance/Ribbon-Consumer/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 10) | @EnableDiscoveryClient
method restTemplate (line 14) | @Bean
method main (line 20) | public static void main(String[] args) {
FILE: 29.Spring-Cloud-Ribbon-LoadBalance/Ribbon-Consumer/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 17) | @RestController
method getUser (line 23) | @GetMapping("user/{id:\\d+}")
method getUsers (line 32) | @GetMapping("user")
method addUser (line 37) | @GetMapping("user/add")
method updateUser (line 48) | @GetMapping("user/update")
method deleteUser (line 54) | @GetMapping("user/delete/{id:\\d+}")
FILE: 29.Spring-Cloud-Ribbon-LoadBalance/Ribbon-Consumer/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method User (line 12) | public User() {
method User (line 15) | public User(Long id, String username, String password) {
method getId (line 21) | public Long getId() {
method setId (line 25) | public void setId(Long id) {
method getUsername (line 29) | public String getUsername() {
method setUsername (line 33) | public void setUsername(String username) {
method getPassword (line 37) | public String getPassword() {
method setPassword (line 41) | public void setPassword(String password) {
method toString (line 45) | @Override
FILE: 30.Spring-Cloud-Hystrix-Circuit-Breaker/Eureka-Client/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableDiscoveryClient
method main (line 12) | public static void main(String[] args) {
FILE: 30.Spring-Cloud-Hystrix-Circuit-Breaker/Eureka-Client/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 11) | @RestController
method info (line 19) | @GetMapping("/info")
method hello (line 28) | @GetMapping("/hello")
FILE: 30.Spring-Cloud-Hystrix-Circuit-Breaker/Eureka-Client/src/main/java/com/example/demo/controller/UserController.java
class UserController (line 11) | @RestController
method get (line 17) | @GetMapping("/{id:\\d+}")
method get (line 23) | @GetMapping("users")
method get (line 33) | @GetMapping
method add (line 42) | @PostMapping
method update (line 47) | @PutMapping
method delete (line 52) | @DeleteMapping("/{id:\\d+}")
FILE: 30.Spring-Cloud-Hystrix-Circuit-Breaker/Eureka-Client/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method User (line 14) | public User() {
method User (line 17) | public User(Long id, String username, String password) {
method getId (line 23) | public Long getId() {
method setId (line 27) | public void setId(Long id) {
method getUsername (line 31) | public String getUsername() {
method setUsername (line 35) | public void setUsername(String username) {
method getPassword (line 39) | public String getPassword() {
method setPassword (line 43) | public void setPassword(String password) {
method toString (line 47) | @Override
FILE: 30.Spring-Cloud-Hystrix-Circuit-Breaker/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableEurekaServer
method main (line 11) | public static void main(String[] args) {
FILE: 30.Spring-Cloud-Hystrix-Circuit-Breaker/Ribbon-Consumer/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 9) | @SpringCloudApplication
method restTemplate (line 12) | @Bean
method main (line 18) | public static void main(String[] args) {
FILE: 30.Spring-Cloud-Hystrix-Circuit-Breaker/Ribbon-Consumer/src/main/java/com/example/demo/Service/UserService.java
class UserService (line 28) | @Service("userService")
method findUser (line 36) | @HystrixCollapser(batchMethod = "findUserBatch", collapserProperties = {
method findUserBatch (line 50) | @HystrixCommand
method getCacheKey (line 57) | public String getCacheKey(Long id) {
method getUser (line 61) | @CacheResult(cacheKeyMethod = "getCacheKey")
method getUserDefault (line 69) | @HystrixCommand(fallbackMethod = "getUserDefault2")
method getUserDefault2 (line 81) | public User getUserDefault2(Long id, Throwable e) {
method getUsers (line 90) | public List<User> getUsers() {
method addUser (line 94) | public String addUser() {
method updateUser (line 104) | @CacheRemove(commandKey = "getUserById")
method deleteUser (line 110) | public void deleteUser(@PathVariable Long id) {
FILE: 30.Spring-Cloud-Hystrix-Circuit-Breaker/Ribbon-Consumer/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 14) | @RestController
method testRequerstMerge (line 20) | @GetMapping("testRequestMerge")
method testCache (line 33) | @GetMapping("testCache")
method getUser (line 40) | @GetMapping("user/{id}")
method getUsers (line 45) | @GetMapping("user")
method addUser (line 50) | @GetMapping("user/add")
method updateUser (line 55) | @GetMapping("user/update")
method deleteUser (line 60) | @GetMapping("user/delete/{id:\\d+}")
FILE: 30.Spring-Cloud-Hystrix-Circuit-Breaker/Ribbon-Consumer/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method User (line 12) | public User() {
method User (line 15) | public User(Long id, String username, String password) {
method getId (line 21) | public Long getId() {
method setId (line 25) | public void setId(Long id) {
method getUsername (line 29) | public String getUsername() {
method setUsername (line 33) | public void setUsername(String username) {
method getPassword (line 37) | public String getPassword() {
method setPassword (line 41) | public void setPassword(String password) {
method toString (line 45) | @Override
FILE: 30.Spring-Cloud-Hystrix-Circuit-Breaker/Ribbon-Consumer/src/main/java/com/example/demo/filter/HystrixRequestContextServletFilter.java
class HystrixRequestContextServletFilter (line 13) | @Component
method init (line 16) | @Override
method doFilter (line 20) | @Override
method destroy (line 27) | @Override
FILE: 31.Spring-Cloud-Hystrix-Dashboard-Turbine/Eureka-Client/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableDiscoveryClient
method main (line 12) | public static void main(String[] args) {
FILE: 31.Spring-Cloud-Hystrix-Dashboard-Turbine/Eureka-Client/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 11) | @RestController
method info (line 19) | @GetMapping("/info")
method hello (line 28) | @GetMapping("/hello")
FILE: 31.Spring-Cloud-Hystrix-Dashboard-Turbine/Eureka-Client/src/main/java/com/example/demo/controller/UserController.java
class UserController (line 11) | @RestController
method get (line 17) | @GetMapping("/{id:\\d+}")
method get (line 23) | @GetMapping("users")
method get (line 33) | @GetMapping
method add (line 42) | @PostMapping
method update (line 47) | @PutMapping
method delete (line 52) | @DeleteMapping("/{id:\\d+}")
FILE: 31.Spring-Cloud-Hystrix-Dashboard-Turbine/Eureka-Client/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method User (line 14) | public User() {
method User (line 17) | public User(Long id, String username, String password) {
method getId (line 23) | public Long getId() {
method setId (line 27) | public void setId(Long id) {
method getUsername (line 31) | public String getUsername() {
method setUsername (line 35) | public void setUsername(String username) {
method getPassword (line 39) | public String getPassword() {
method setPassword (line 43) | public void setPassword(String password) {
method toString (line 47) | @Override
FILE: 31.Spring-Cloud-Hystrix-Dashboard-Turbine/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableEurekaServer
method main (line 11) | public static void main(String[] args) {
FILE: 31.Spring-Cloud-Hystrix-Dashboard-Turbine/Hystrix-Dashboard/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 7) | @SpringBootApplication
method main (line 11) | public static void main(String[] args) {
FILE: 31.Spring-Cloud-Hystrix-Dashboard-Turbine/Ribbon-Consumer/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 9) | @SpringCloudApplication
method restTemplate (line 12) | @Bean
method main (line 18) | public static void main(String[] args) {
FILE: 31.Spring-Cloud-Hystrix-Dashboard-Turbine/Ribbon-Consumer/src/main/java/com/example/demo/Service/UserService.java
class UserService (line 28) | @Service("userService")
method findUser (line 36) | @HystrixCollapser(batchMethod = "findUserBatch", collapserProperties = {
method findUserBatch (line 50) | @HystrixCommand
method getCacheKey (line 57) | public String getCacheKey(Long id) {
method getUser (line 61) | @CacheResult(cacheKeyMethod = "getCacheKey")
method getUserDefault (line 69) | @HystrixCommand(fallbackMethod = "getUserDefault2")
method getUserDefault2 (line 81) | public User getUserDefault2(Long id, Throwable e) {
method getUsers (line 90) | public List<User> getUsers() {
method addUser (line 94) | public String addUser() {
method updateUser (line 104) | @CacheRemove(commandKey = "getUserById")
method deleteUser (line 110) | public void deleteUser(@PathVariable Long id) {
FILE: 31.Spring-Cloud-Hystrix-Dashboard-Turbine/Ribbon-Consumer/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 14) | @RestController
method testRequerstMerge (line 20) | @GetMapping("testRequestMerge")
method testCache (line 33) | @GetMapping("testCache")
method getUser (line 40) | @GetMapping("user/{id}")
method getUsers (line 45) | @GetMapping("user")
method addUser (line 50) | @GetMapping("user/add")
method updateUser (line 55) | @GetMapping("user/update")
method deleteUser (line 60) | @GetMapping("user/delete/{id:\\d+}")
FILE: 31.Spring-Cloud-Hystrix-Dashboard-Turbine/Ribbon-Consumer/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method User (line 12) | public User() {
method User (line 15) | public User(Long id, String username, String password) {
method getId (line 21) | public Long getId() {
method setId (line 25) | public void setId(Long id) {
method getUsername (line 29) | public String getUsername() {
method setUsername (line 33) | public void setUsername(String username) {
method getPassword (line 37) | public String getPassword() {
method setPassword (line 41) | public void setPassword(String password) {
method toString (line 45) | @Override
FILE: 31.Spring-Cloud-Hystrix-Dashboard-Turbine/Ribbon-Consumer/src/main/java/com/example/demo/filter/HystrixRequestContextServletFilter.java
class HystrixRequestContextServletFilter (line 13) | @Component
method init (line 16) | @Override
method doFilter (line 20) | @Override
method destroy (line 27) | @Override
FILE: 31.Spring-Cloud-Hystrix-Dashboard-Turbine/Turbine/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @SpringBootApplication
method main (line 13) | public static void main(String[] args) {
FILE: 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/Eureka-Client/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableDiscoveryClient
method main (line 12) | public static void main(String[] args) {
FILE: 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/Eureka-Client/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 11) | @RestController
method info (line 19) | @GetMapping("/info")
method hello (line 28) | @GetMapping("/hello")
FILE: 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/Eureka-Client/src/main/java/com/example/demo/controller/UserController.java
class UserController (line 11) | @RestController
method get (line 17) | @GetMapping("/{id:\\d+}")
method get (line 23) | @GetMapping("users")
method get (line 33) | @GetMapping
method add (line 42) | @PostMapping
method update (line 47) | @PutMapping
method delete (line 52) | @DeleteMapping("/{id:\\d+}")
FILE: 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/Eureka-Client/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method User (line 14) | public User() {
method User (line 17) | public User(Long id, String username, String password) {
method getId (line 23) | public Long getId() {
method setId (line 27) | public void setId(Long id) {
method getUsername (line 31) | public String getUsername() {
method setUsername (line 35) | public void setUsername(String username) {
method getPassword (line 39) | public String getPassword() {
method setPassword (line 43) | public void setPassword(String password) {
method toString (line 47) | @Override
FILE: 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableEurekaServer
method main (line 11) | public static void main(String[] args) {
FILE: 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/Hystrix-Dashboard/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 7) | @SpringBootApplication
method main (line 11) | public static void main(String[] args) {
FILE: 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/Ribbon-Consumer/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 9) | @SpringCloudApplication
method restTemplate (line 12) | @Bean
method main (line 18) | public static void main(String[] args) {
FILE: 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/Ribbon-Consumer/src/main/java/com/example/demo/Service/UserService.java
class UserService (line 28) | @Service("userService")
method findUser (line 36) | @HystrixCollapser(batchMethod = "findUserBatch", collapserProperties = {
method findUserBatch (line 50) | @HystrixCommand
method getCacheKey (line 57) | public String getCacheKey(Long id) {
method getUser (line 61) | @CacheResult(cacheKeyMethod = "getCacheKey")
method getUserDefault (line 69) | @HystrixCommand(fallbackMethod = "getUserDefault2")
method getUserDefault2 (line 81) | public User getUserDefault2(Long id, Throwable e) {
method getUsers (line 90) | public List<User> getUsers() {
method addUser (line 94) | public String addUser() {
method updateUser (line 104) | @CacheRemove(commandKey = "getUserById")
method deleteUser (line 110) | public void deleteUser(@PathVariable Long id) {
FILE: 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/Ribbon-Consumer/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 14) | @RestController
method testRequerstMerge (line 20) | @GetMapping("testRequestMerge")
method testCache (line 33) | @GetMapping("testCache")
method getUser (line 40) | @GetMapping("user/{id}")
method getUsers (line 45) | @GetMapping("user")
method addUser (line 50) | @GetMapping("user/add")
method updateUser (line 55) | @GetMapping("user/update")
method deleteUser (line 60) | @GetMapping("user/delete/{id:\\d+}")
FILE: 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/Ribbon-Consumer/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method User (line 12) | public User() {
method User (line 15) | public User(Long id, String username, String password) {
method getId (line 21) | public Long getId() {
method setId (line 25) | public void setId(Long id) {
method getUsername (line 29) | public String getUsername() {
method setUsername (line 33) | public void setUsername(String username) {
method getPassword (line 37) | public String getPassword() {
method setPassword (line 41) | public void setPassword(String password) {
method toString (line 45) | @Override
FILE: 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/Ribbon-Consumer/src/main/java/com/example/demo/filter/HystrixRequestContextServletFilter.java
class HystrixRequestContextServletFilter (line 13) | @Component
method init (line 16) | @Override
method doFilter (line 20) | @Override
method destroy (line 27) | @Override
FILE: 32.Spring-Cloud-Hystrix-Dashboard-Turbine-RabbitMQ/Turbine-Stream/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 7) | @SpringBootApplication
method main (line 11) | public static void main(String[] args) {
FILE: 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableDiscoveryClient
method main (line 12) | public static void main(String[] args) {
FILE: 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 11) | @RestController
method info (line 19) | @GetMapping("/info")
method hello (line 28) | @GetMapping("/hello")
FILE: 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/controller/UserController.java
class UserController (line 11) | @RestController
method get (line 17) | @GetMapping("/{id:\\d+}")
method get (line 23) | @GetMapping
method add (line 32) | @PostMapping
method update (line 37) | @PutMapping
method delete (line 42) | @DeleteMapping("/{id:\\d+}")
FILE: 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Client/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method User (line 14) | public User() {
method User (line 17) | public User(Long id, String username, String password) {
method getId (line 23) | public Long getId() {
method setId (line 27) | public void setId(Long id) {
method getUsername (line 31) | public String getUsername() {
method setUsername (line 35) | public void setUsername(String username) {
method getPassword (line 39) | public String getPassword() {
method setPassword (line 43) | public void setPassword(String password) {
method toString (line 47) | @Override
FILE: 33.Spring-Cloud-Feign-Declarative-REST-Client/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableEurekaServer
method main (line 11) | public static void main(String[] args) {
FILE: 33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 10) | @EnableDiscoveryClient
method feignLoggerLevel (line 14) | @Bean
method main (line 18) | public static void main(String[] args) {
FILE: 33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 10) | @RestController
method getUser (line 16) | @GetMapping("user/{id}")
method getUsers (line 21) | @GetMapping("user")
method addUser (line 26) | @PostMapping("user")
method updateUser (line 32) | @PutMapping("user")
method deleteUser (line 38) | @DeleteMapping("user/{id}")
FILE: 33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method User (line 12) | public User() {
method User (line 15) | public User(Long id, String username, String password) {
method getId (line 21) | public Long getId() {
method setId (line 25) | public void setId(Long id) {
method getUsername (line 29) | public String getUsername() {
method setUsername (line 33) | public void setUsername(String username) {
method getPassword (line 37) | public String getPassword() {
method setPassword (line 41) | public void setPassword(String password) {
method toString (line 45) | @Override
FILE: 33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/service/UserService.java
type UserService (line 12) | @FeignClient(value = "Server-Provider", fallback = UserServiceFallback.c...
method get (line 15) | @GetMapping("user/{id}")
method get (line 18) | @GetMapping("user")
method add (line 21) | @PostMapping("user")
method update (line 24) | @PutMapping("user")
method delete (line 27) | @DeleteMapping("user/{id}")
FILE: 33.Spring-Cloud-Feign-Declarative-REST-Client/Feign-Consumer/src/main/java/com/example/demo/service/UserServiceFallback.java
class UserServiceFallback (line 13) | @Component
method get (line 17) | @Override
method get (line 22) | @Override
method add (line 27) | @Override
method update (line 32) | @Override
method delete (line 37) | @Override
FILE: 34.Start-Spring-Security/src/main/java/cc/mrbird/SecurityApplication.java
class SecurityApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 34.Start-Spring-Security/src/main/java/cc/mrbird/security/browser/BrowserSecurityConfig.java
class BrowserSecurityConfig (line 7) | @Configuration
method configure (line 10) | @Override
FILE: 34.Start-Spring-Security/src/main/java/cc/mrbird/web/controller/TestController.java
class TestController (line 6) | @RestController
method hello (line 8) | @GetMapping("hello")
FILE: 35.Spring-Security-Authentication/src/main/java/cc/mrbird/SecurityApplication.java
class SecurityApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 35.Spring-Security-Authentication/src/main/java/cc/mrbird/domain/MyUser.java
class MyUser (line 5) | public class MyUser implements Serializable {
method getUserName (line 20) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 28) | public String getPassword() {
method setPassword (line 32) | public void setPassword(String password) {
method isAccountNonExpired (line 36) | public boolean isAccountNonExpired() {
method setAccountNonExpired (line 40) | public void setAccountNonExpired(boolean accountNonExpired) {
method isAccountNonLocked (line 44) | public boolean isAccountNonLocked() {
method setAccountNonLocked (line 48) | public void setAccountNonLocked(boolean accountNonLocked) {
method isCredentialsNonExpired (line 52) | public boolean isCredentialsNonExpired() {
method setCredentialsNonExpired (line 56) | public void setCredentialsNonExpired(boolean credentialsNonExpired) {
method isEnabled (line 60) | public boolean isEnabled() {
method setEnabled (line 64) | public void setEnabled(boolean enabled) {
FILE: 35.Spring-Security-Authentication/src/main/java/cc/mrbird/handler/MyAuthenticationFailureHandler.java
class MyAuthenticationFailureHandler (line 16) | @Component
method onAuthenticationFailure (line 22) | @Override
FILE: 35.Spring-Security-Authentication/src/main/java/cc/mrbird/handler/MyAuthenticationSucessHandler.java
class MyAuthenticationSucessHandler (line 20) | @Component
method onAuthenticationSuccess (line 30) | @Override
FILE: 35.Spring-Security-Authentication/src/main/java/cc/mrbird/security/browser/BrowserSecurityConfig.java
class BrowserSecurityConfig (line 13) | @Configuration
method passwordEncoder (line 23) | @Bean
method configure (line 28) | @Override
FILE: 35.Spring-Security-Authentication/src/main/java/cc/mrbird/security/browser/UserDetailService.java
class UserDetailService (line 13) | @Configuration
method loadUserByUsername (line 19) | @Override
FILE: 35.Spring-Security-Authentication/src/main/java/cc/mrbird/web/controller/BrowserSecurityController.java
class BrowserSecurityController (line 21) | @RestController
method requireAuthentication (line 28) | @GetMapping("/authentication/require")
FILE: 35.Spring-Security-Authentication/src/main/java/cc/mrbird/web/controller/TestController.java
class TestController (line 8) | @RestController
method hello (line 10) | @GetMapping("hello")
method index (line 15) | @GetMapping("index")
FILE: 36.Spring-Security-ValidateCode/src/main/java/cc/mrbird/SecurityApplication.java
class SecurityApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 36.Spring-Security-ValidateCode/src/main/java/cc/mrbird/domain/MyUser.java
class MyUser (line 5) | public class MyUser implements Serializable {
method getUserName (line 20) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 28) | public String getPassword() {
method setPassword (line 32) | public void setPassword(String password) {
method isAccountNonExpired (line 36) | public boolean isAccountNonExpired() {
method setAccountNonExpired (line 40) | public void setAccountNonExpired(boolean accountNonExpired) {
method isAccountNonLocked (line 44) | public boolean isAccountNonLocked() {
method setAccountNonLocked (line 48) | public void setAccountNonLocked(boolean accountNonLocked) {
method isCredentialsNonExpired (line 52) | public boolean isCredentialsNonExpired() {
method setCredentialsNonExpired (line 56) | public void setCredentialsNonExpired(boolean credentialsNonExpired) {
method isEnabled (line 60) | public boolean isEnabled() {
method setEnabled (line 64) | public void setEnabled(boolean enabled) {
FILE: 36.Spring-Security-ValidateCode/src/main/java/cc/mrbird/handler/MyAuthenticationFailureHandler.java
class MyAuthenticationFailureHandler (line 16) | @Component
method onAuthenticationFailure (line 22) | @Override
FILE: 36.Spring-Security-ValidateCode/src/main/java/cc/mrbird/handler/MyAuthenticationSucessHandler.java
class MyAuthenticationSucessHandler (line 20) | @Component
method onAuthenticationSuccess (line 30) | @Override
FILE: 36.Spring-Security-ValidateCode/src/main/java/cc/mrbird/security/browser/BrowserSecurityConfig.java
class BrowserSecurityConfig (line 15) | @Configuration
method passwordEncoder (line 28) | @Bean
method configure (line 33) | @Override
FILE: 36.Spring-Security-ValidateCode/src/main/java/cc/mrbird/security/browser/UserDetailService.java
class UserDetailService (line 13) | @Configuration
method loadUserByUsername (line 19) | @Override
FILE: 36.Spring-Security-ValidateCode/src/main/java/cc/mrbird/validate/code/ImageCode.java
class ImageCode (line 6) | public class ImageCode {
method ImageCode (line 14) | public ImageCode(BufferedImage image, String code, int expireIn) {
method ImageCode (line 20) | public ImageCode(BufferedImage image, String code, LocalDateTime expir...
method isExpire (line 26) | boolean isExpire() {
method getImage (line 30) | public BufferedImage getImage() {
method setImage (line 34) | public void setImage(BufferedImage image) {
method getCode (line 38) | public String getCode() {
method setCode (line 42) | public void setCode(String code) {
method getExpireTime (line 46) | public LocalDateTime getExpireTime() {
method setExpireTime (line 50) | public void setExpireTime(LocalDateTime expireTime) {
FILE: 36.Spring-Security-ValidateCode/src/main/java/cc/mrbird/validate/code/ValidateCodeException.java
class ValidateCodeException (line 5) | public class ValidateCodeException extends AuthenticationException {
method ValidateCodeException (line 8) | ValidateCodeException(String message) {
FILE: 36.Spring-Security-ValidateCode/src/main/java/cc/mrbird/validate/code/ValidateCodeFilter.java
class ValidateCodeFilter (line 21) | @Component
method doFilterInternal (line 29) | @Override
method validateCode (line 43) | private void validateCode(ServletWebRequest servletWebRequest) throws ...
FILE: 36.Spring-Security-ValidateCode/src/main/java/cc/mrbird/web/controller/BrowserSecurityController.java
class BrowserSecurityController (line 21) | @RestController
method requireAuthentication (line 28) | @GetMapping("/authentication/require")
FILE: 36.Spring-Security-ValidateCode/src/main/java/cc/mrbird/web/controller/TestController.java
class TestController (line 8) | @RestController
method hello (line 10) | @GetMapping("hello")
method index (line 15) | @GetMapping("index")
FILE: 36.Spring-Security-ValidateCode/src/main/java/cc/mrbird/web/controller/ValidateController.java
class ValidateController (line 18) | @RestController
method createCode (line 25) | @GetMapping("/code/image")
method createImageCode (line 32) | private ImageCode createImageCode() {
method getRandColor (line 69) | private Color getRandColor(int fc, int bc) {
FILE: 37.Spring-Security-RememberMe/src/main/java/cc/mrbird/SecurityApplication.java
class SecurityApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 37.Spring-Security-RememberMe/src/main/java/cc/mrbird/domain/MyUser.java
class MyUser (line 5) | public class MyUser implements Serializable {
method getUserName (line 20) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 28) | public String getPassword() {
method setPassword (line 32) | public void setPassword(String password) {
method isAccountNonExpired (line 36) | public boolean isAccountNonExpired() {
method setAccountNonExpired (line 40) | public void setAccountNonExpired(boolean accountNonExpired) {
method isAccountNonLocked (line 44) | public boolean isAccountNonLocked() {
method setAccountNonLocked (line 48) | public void setAccountNonLocked(boolean accountNonLocked) {
method isCredentialsNonExpired (line 52) | public boolean isCredentialsNonExpired() {
method setCredentialsNonExpired (line 56) | public void setCredentialsNonExpired(boolean credentialsNonExpired) {
method isEnabled (line 60) | public boolean isEnabled() {
method setEnabled (line 64) | public void setEnabled(boolean enabled) {
FILE: 37.Spring-Security-RememberMe/src/main/java/cc/mrbird/handler/MyAuthenticationFailureHandler.java
class MyAuthenticationFailureHandler (line 16) | @Component
method onAuthenticationFailure (line 22) | @Override
FILE: 37.Spring-Security-RememberMe/src/main/java/cc/mrbird/handler/MyAuthenticationSucessHandler.java
class MyAuthenticationSucessHandler (line 20) | @Component
method onAuthenticationSuccess (line 30) | @Override
FILE: 37.Spring-Security-RememberMe/src/main/java/cc/mrbird/security/browser/BrowserSecurityConfig.java
class BrowserSecurityConfig (line 19) | @Configuration
method passwordEncoder (line 37) | @Bean
method persistentTokenRepository (line 42) | @Bean
method configure (line 50) | @Override
FILE: 37.Spring-Security-RememberMe/src/main/java/cc/mrbird/security/browser/UserDetailService.java
class UserDetailService (line 13) | @Configuration
method loadUserByUsername (line 19) | @Override
FILE: 37.Spring-Security-RememberMe/src/main/java/cc/mrbird/validate/code/ImageCode.java
class ImageCode (line 6) | public class ImageCode {
method ImageCode (line 14) | public ImageCode(BufferedImage image, String code, int expireIn) {
method ImageCode (line 20) | public ImageCode(BufferedImage image, String code, LocalDateTime expir...
method isExpire (line 26) | boolean isExpire() {
method getImage (line 30) | public BufferedImage getImage() {
method setImage (line 34) | public void setImage(BufferedImage image) {
method getCode (line 38) | public String getCode() {
method setCode (line 42) | public void setCode(String code) {
method getExpireTime (line 46) | public LocalDateTime getExpireTime() {
method setExpireTime (line 50) | public void setExpireTime(LocalDateTime expireTime) {
FILE: 37.Spring-Security-RememberMe/src/main/java/cc/mrbird/validate/code/ValidateCodeException.java
class ValidateCodeException (line 5) | public class ValidateCodeException extends AuthenticationException {
method ValidateCodeException (line 8) | ValidateCodeException(String message) {
FILE: 37.Spring-Security-RememberMe/src/main/java/cc/mrbird/validate/code/ValidateCodeFilter.java
class ValidateCodeFilter (line 21) | @Component
method doFilterInternal (line 29) | @Override
method validateCode (line 43) | private void validateCode(ServletWebRequest servletWebRequest) throws ...
FILE: 37.Spring-Security-RememberMe/src/main/java/cc/mrbird/web/controller/BrowserSecurityController.java
class BrowserSecurityController (line 21) | @RestController
method requireAuthentication (line 28) | @GetMapping("/authentication/require")
FILE: 37.Spring-Security-RememberMe/src/main/java/cc/mrbird/web/controller/TestController.java
class TestController (line 8) | @RestController
method hello (line 10) | @GetMapping("hello")
method index (line 15) | @GetMapping("index")
FILE: 37.Spring-Security-RememberMe/src/main/java/cc/mrbird/web/controller/ValidateController.java
class ValidateController (line 18) | @RestController
method createCode (line 25) | @GetMapping("/code/image")
method createImageCode (line 32) | private ImageCode createImageCode() {
method getRandColor (line 69) | private Color getRandColor(int fc, int bc) {
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/SecurityApplication.java
class SecurityApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/domain/MyUser.java
class MyUser (line 5) | public class MyUser implements Serializable {
method getUserName (line 20) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 28) | public String getPassword() {
method setPassword (line 32) | public void setPassword(String password) {
method isAccountNonExpired (line 36) | public boolean isAccountNonExpired() {
method setAccountNonExpired (line 40) | public void setAccountNonExpired(boolean accountNonExpired) {
method isAccountNonLocked (line 44) | public boolean isAccountNonLocked() {
method setAccountNonLocked (line 48) | public void setAccountNonLocked(boolean accountNonLocked) {
method isCredentialsNonExpired (line 52) | public boolean isCredentialsNonExpired() {
method setCredentialsNonExpired (line 56) | public void setCredentialsNonExpired(boolean credentialsNonExpired) {
method isEnabled (line 60) | public boolean isEnabled() {
method setEnabled (line 64) | public void setEnabled(boolean enabled) {
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/handler/MyAuthenticationFailureHandler.java
class MyAuthenticationFailureHandler (line 16) | @Component
method onAuthenticationFailure (line 22) | @Override
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/handler/MyAuthenticationSucessHandler.java
class MyAuthenticationSucessHandler (line 20) | @Component
method onAuthenticationSuccess (line 30) | @Override
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/security/browser/BrowserSecurityConfig.java
class BrowserSecurityConfig (line 18) | @Configuration
method passwordEncoder (line 36) | @Bean
method configure (line 41) | @Override
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/security/browser/UserDetailService.java
class UserDetailService (line 13) | @Configuration
method loadUserByUsername (line 19) | @Override
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/validate/code/ImageCode.java
class ImageCode (line 6) | public class ImageCode {
method ImageCode (line 14) | public ImageCode(BufferedImage image, String code, int expireIn) {
method ImageCode (line 20) | public ImageCode(BufferedImage image, String code, LocalDateTime expir...
method isExpire (line 26) | boolean isExpire() {
method getImage (line 30) | public BufferedImage getImage() {
method setImage (line 34) | public void setImage(BufferedImage image) {
method getCode (line 38) | public String getCode() {
method setCode (line 42) | public void setCode(String code) {
method getExpireTime (line 46) | public LocalDateTime getExpireTime() {
method setExpireTime (line 50) | public void setExpireTime(LocalDateTime expireTime) {
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/validate/code/ValidateCodeException.java
class ValidateCodeException (line 5) | public class ValidateCodeException extends AuthenticationException {
method ValidateCodeException (line 8) | public ValidateCodeException(String message) {
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/validate/code/ValidateCodeFilter.java
class ValidateCodeFilter (line 21) | @Component
method doFilterInternal (line 29) | @Override
method validateCode (line 43) | private void validateCode(ServletWebRequest servletWebRequest) throws ...
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationConfig.java
class SmsAuthenticationConfig (line 14) | @Component
method configure (line 26) | @Override
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationFilter.java
class SmsAuthenticationFilter (line 13) | public class SmsAuthenticationFilter extends AbstractAuthenticationProce...
method SmsAuthenticationFilter (line 21) | public SmsAuthenticationFilter() {
method attemptAuthentication (line 26) | public Authentication attemptAuthentication(HttpServletRequest request,
method obtainMobile (line 48) | protected String obtainMobile(HttpServletRequest request) {
method setDetails (line 52) | protected void setDetails(HttpServletRequest request,
method setMobileParameter (line 57) | public void setMobileParameter(String mobileParameter) {
method setPostOnly (line 62) | public void setPostOnly(boolean postOnly) {
method getMobileParameter (line 66) | public final String getMobileParameter() {
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationProvider.java
class SmsAuthenticationProvider (line 10) | public class SmsAuthenticationProvider implements AuthenticationProvider {
method authenticate (line 14) | @Override
method supports (line 29) | @Override
method getUserDetailService (line 34) | public UserDetailService getUserDetailService() {
method setUserDetailService (line 38) | public void setUserDetailService(UserDetailService userDetailService) {
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationToken.java
class SmsAuthenticationToken (line 9) | public class SmsAuthenticationToken extends AbstractAuthenticationToken {
method SmsAuthenticationToken (line 15) | public SmsAuthenticationToken(String mobile) {
method SmsAuthenticationToken (line 21) | public SmsAuthenticationToken(Object principal, Collection<? extends G...
method getCredentials (line 27) | @Override
method getPrincipal (line 32) | public Object getPrincipal() {
method setAuthenticated (line 36) | public void setAuthenticated(boolean isAuthenticated) throws IllegalAr...
method eraseCredentials (line 45) | @Override
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/validate/smscode/SmsCode.java
class SmsCode (line 5) | public class SmsCode {
method SmsCode (line 11) | public SmsCode(String code, int expireIn) {
method SmsCode (line 16) | public SmsCode(String code, LocalDateTime expireTime) {
method isExpire (line 21) | boolean isExpire() {
method getCode (line 25) | public String getCode() {
method setCode (line 29) | public void setCode(String code) {
method getExpireTime (line 33) | public LocalDateTime getExpireTime() {
method setExpireTime (line 37) | public void setExpireTime(LocalDateTime expireTime) {
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/validate/smscode/SmsCodeFilter.java
class SmsCodeFilter (line 22) | @Component
method doFilterInternal (line 30) | @Override
method validateCode (line 44) | private void validateCode(ServletWebRequest servletWebRequest) throws ...
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/web/controller/BrowserSecurityController.java
class BrowserSecurityController (line 21) | @RestController
method requireAuthentication (line 28) | @GetMapping("/authentication/require")
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/web/controller/TestController.java
class TestController (line 8) | @RestController
method hello (line 10) | @GetMapping("hello")
method index (line 15) | @GetMapping("index")
FILE: 38.Spring-Security-SmsCode/src/main/java/cc/mrbird/web/controller/ValidateController.java
class ValidateController (line 20) | @RestController
method createCode (line 29) | @GetMapping("/code/image")
method createSmsCode (line 36) | @GetMapping("/code/sms")
method createSMSCode (line 44) | private SmsCode createSMSCode() {
method createImageCode (line 49) | private ImageCode createImageCode() {
method getRandColor (line 86) | private Color getRandColor(int fc, int bc) {
FILE: 39.Spring-Cloud-Zuul-Router/Eureka-Client/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableDiscoveryClient
method main (line 12) | public static void main(String[] args) {
FILE: 39.Spring-Cloud-Zuul-Router/Eureka-Client/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 11) | @RestController
method info (line 19) | @GetMapping("/info")
method hello (line 28) | @GetMapping("/hello")
FILE: 39.Spring-Cloud-Zuul-Router/Eureka-Client/src/main/java/com/example/demo/controller/UserController.java
class UserController (line 11) | @RestController
method get (line 17) | @GetMapping("/{id:\\d+}")
method get (line 23) | @GetMapping
method add (line 32) | @PostMapping
method update (line 37) | @PutMapping
method delete (line 42) | @DeleteMapping("/{id:\\d+}")
FILE: 39.Spring-Cloud-Zuul-Router/Eureka-Client/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method User (line 14) | public User() {
method User (line 17) | public User(Long id, String username, String password) {
method getId (line 23) | public Long getId() {
method setId (line 27) | public void setId(Long id) {
method getUsername (line 31) | public String getUsername() {
method setUsername (line 35) | public void setUsername(String username) {
method getPassword (line 39) | public String getPassword() {
method setPassword (line 43) | public void setPassword(String password) {
method toString (line 47) | @Override
FILE: 39.Spring-Cloud-Zuul-Router/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableEurekaServer
method main (line 11) | public static void main(String[] args) {
FILE: 39.Spring-Cloud-Zuul-Router/Feign-Consumer/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 10) | @EnableDiscoveryClient
method feignLoggerLevel (line 14) | @Bean
method main (line 18) | public static void main(String[] args) {
FILE: 39.Spring-Cloud-Zuul-Router/Feign-Consumer/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 10) | @RestController
method getUser (line 16) | @GetMapping("user/{id}")
method getUsers (line 21) | @GetMapping("user")
method addUser (line 26) | @PostMapping("user")
method updateUser (line 32) | @PutMapping("user")
method deleteUser (line 38) | @DeleteMapping("user/{id}")
FILE: 39.Spring-Cloud-Zuul-Router/Feign-Consumer/src/main/java/com/example/demo/domain/User.java
class User (line 5) | public class User implements Serializable {
method User (line 12) | public User() {
method User (line 15) | public User(Long id, String username, String password) {
method getId (line 21) | public Long getId() {
method setId (line 25) | public void setId(Long id) {
method getUsername (line 29) | public String getUsername() {
method setUsername (line 33) | public void setUsername(String username) {
method getPassword (line 37) | public String getPassword() {
method setPassword (line 41) | public void setPassword(String password) {
method toString (line 45) | @Override
FILE: 39.Spring-Cloud-Zuul-Router/Feign-Consumer/src/main/java/com/example/demo/service/UserService.java
type UserService (line 12) | @FeignClient(value = "Server-Provider", fallback = UserServiceFallback.c...
method get (line 15) | @GetMapping("user/{id}")
method get (line 18) | @GetMapping("user")
method add (line 21) | @PostMapping("user")
method update (line 24) | @PutMapping("user")
method delete (line 27) | @DeleteMapping("user/{id}")
FILE: 39.Spring-Cloud-Zuul-Router/Feign-Consumer/src/main/java/com/example/demo/service/UserServiceFallback.java
class UserServiceFallback (line 13) | @Component
method get (line 17) | @Override
method get (line 22) | @Override
method add (line 27) | @Override
method update (line 32) | @Override
method delete (line 37) | @Override
FILE: 39.Spring-Cloud-Zuul-Router/Zuul-Gateway/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 10) | @EnableZuulProxy
method hello (line 15) | @GetMapping("/test/hello")
method main (line 19) | public static void main(String[] args) {
FILE: 39.Spring-Cloud-Zuul-Router/Zuul-Gateway/src/main/java/com/example/demo/filter/PreSendForwardFilter.java
class PreSendForwardFilter (line 11) | @Component
method filterType (line 16) | @Override
method filterOrder (line 21) | @Override
method shouldFilter (line 26) | @Override
method run (line 31) | @Override
FILE: 40.Spring-Boot-Dubbo-Zookeeper/common-api/src/main/java/cc/mrbird/common/api/HelloService.java
type HelloService (line 3) | public interface HelloService {
method hello (line 4) | String hello(String message);
FILE: 40.Spring-Boot-Dubbo-Zookeeper/server-consumer/src/main/java/cc/mrbird/ConsumerApplicaiton.java
class ConsumerApplicaiton (line 7) | @EnableDubbo
method main (line 10) | public static void main(String[] args) {
FILE: 40.Spring-Boot-Dubbo-Zookeeper/server-consumer/src/main/java/cc/mrbird/consumer/controller/HelloController.java
class HelloController (line 9) | @RestController
method hello (line 15) | @GetMapping("/hello/{message}")
FILE: 40.Spring-Boot-Dubbo-Zookeeper/server-provider/src/main/java/cc/mrbird/ProviderApplicaiton.java
class ProviderApplicaiton (line 7) | @EnableDubbo
method main (line 10) | public static void main(String[] args) {
FILE: 40.Spring-Boot-Dubbo-Zookeeper/server-provider/src/main/java/cc/mrbird/provider/service/HelloServiceImpl.java
class HelloServiceImpl (line 7) | @Service(interfaceClass = HelloService.class)
method hello (line 10) | @Override
FILE: 41.Spring-Cloud-Config/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableEurekaServer
method main (line 11) | public static void main(String[] args) {
FILE: 41.Spring-Cloud-Config/config-client/src/main/java/cc/mrbird/demo/DemoApplication.java
class DemoApplication (line 7) | @SpringBootApplication
method main (line 11) | public static void main(String[] args) {
FILE: 41.Spring-Cloud-Config/config-client/src/main/java/cc/mrbird/demo/controller/TestController.java
class TestController (line 8) | @RestController
method getMessage (line 15) | @GetMapping("message")
FILE: 41.Spring-Cloud-Config/config-server/src/main/java/cc/mrbird/demo/DemoApplication.java
class DemoApplication (line 8) | @SpringBootApplication
method main (line 13) | public static void main(String[] args) {
FILE: 42.Spring-Cloud-Bus/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableEurekaServer
method main (line 11) | public static void main(String[] args) {
FILE: 42.Spring-Cloud-Bus/config-client/src/main/java/cc/mrbird/demo/DemoApplication.java
class DemoApplication (line 7) | @SpringBootApplication
method main (line 11) | public static void main(String[] args) {
FILE: 42.Spring-Cloud-Bus/config-client/src/main/java/cc/mrbird/demo/controller/TestController.java
class TestController (line 8) | @RestController
method getMessage (line 15) | @GetMapping("message")
FILE: 42.Spring-Cloud-Bus/config-server/src/main/java/cc/mrbird/demo/DemoApplication.java
class DemoApplication (line 8) | @SpringBootApplication
method main (line 15) | public static void main(String[] args) {
FILE: 43.Spring-Cloud-Sleuth/Eureka-Service/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 8) | @EnableEurekaServer
method main (line 11) | public static void main(String[] args) {
FILE: 43.Spring-Cloud-Sleuth/Server-Provider1/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 10) | @SpringBootApplication
method restTemplate (line 14) | @Bean
method main (line 20) | public static void main(String[] args) {
FILE: 43.Spring-Cloud-Sleuth/Server-Provider1/src/main/java/com/example/demo/controller/HelloController.java
class HelloController (line 11) | @RestController
method hello (line 20) | @GetMapping
FILE: 43.Spring-Cloud-Sleuth/Server-Provider2/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 7) | @SpringBootApplication
method main (line 11) | public static void main(String[] args) {
FILE: 43.Spring-Cloud-Sleuth/Server-Provider2/src/main/java/com/example/demo/controller/HelloController.java
class HelloController (line 9) | @RestController
method hello (line 15) | @GetMapping
FILE: 43.Spring-Cloud-Sleuth/Zipkin-Server/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 7) | @SpringBootApplication
method main (line 12) | public static void main(String[] args) {
FILE: 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/EnableAutoConfigurationBootstrap.java
class EnableAutoConfigurationBootstrap (line 11) | @EnableAutoConfiguration
method main (line 14) | public static void main(String[] args) {
FILE: 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/ServiceBootstrap.java
class ServiceBootstrap (line 12) | @ComponentScan("com.example.demo.service")
method main (line 15) | public static void main(String[] args) {
FILE: 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/bootstrap/TestEnableBootstap.java
class TestEnableBootstap (line 11) | @EnableHelloWorld
method main (line 13) | public static void main(String[] args) {
FILE: 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/configuration/HelloWorldAutoConfiguration.java
class HelloWorldAutoConfiguration (line 10) | @Configuration
FILE: 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/configuration/HelloWorldConfiguration.java
class HelloWorldConfiguration (line 9) | @Configuration
method hello (line 12) | @Bean
FILE: 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/selector/HelloWorldImportSelector.java
class HelloWorldImportSelector (line 10) | public class HelloWorldImportSelector implements ImportSelector {
method selectImports (line 11) | @Override
FILE: 44.Spring-Boot-Autoconfiguration/src/main/java/com/example/demo/service/TestService.java
class TestService (line 9) | @SecondLevelService
FILE: 44.Spring-Boot-Autoconfiguration/src/test/java/com/example/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 45.Spring-Boot-SpringApplication/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 9) | @SpringBootApplication
method main (line 12) | public static void main(String[] args) {
FILE: 45.Spring-Boot-SpringApplication/src/main/java/com/example/demo/initializer/AfterHelloApplicationContextInitializer.java
class AfterHelloApplicationContextInitializer (line 10) | public class AfterHelloApplicationContextInitializer
method initialize (line 12) | @Override
method getOrder (line 17) | @Override
FILE: 45.Spring-Boot-SpringApplication/src/main/java/com/example/demo/initializer/HelloApplicationContextInitializer.java
class HelloApplicationContextInitializer (line 11) | @Order(Ordered.HIGHEST_PRECEDENCE)
method initialize (line 14) | @Override
FILE: 45.Spring-Boot-SpringApplication/src/main/java/com/example/demo/listener/AfterContextClosedEventListener.java
class AfterContextClosedEventListener (line 10) | public class AfterContextClosedEventListener implements ApplicationListe...
method onApplicationEvent (line 11) | @Override
method getOrder (line 16) | @Override
FILE: 45.Spring-Boot-SpringApplication/src/main/java/com/example/demo/listener/ContextClosedEventListener.java
class ContextClosedEventListener (line 11) | @Order(Ordered.HIGHEST_PRECEDENCE)
method onApplicationEvent (line 14) | @Override
FILE: 45.Spring-Boot-SpringApplication/src/main/java/com/example/demo/listener/HelloApplicationRunListener.java
class HelloApplicationRunListener (line 11) | public class HelloApplicationRunListener implements SpringApplicationRun...
method HelloApplicationRunListener (line 14) | public HelloApplicationRunListener(SpringApplication application, Stri...
method starting (line 18) | @Override
method environmentPrepared (line 23) | @Override
method contextPrepared (line 28) | @Override
method contextLoaded (line 33) | @Override
method started (line 38) | @Override
method running (line 43) | @Override
method failed (line 48) | @Override
FILE: 45.Spring-Boot-SpringApplication/src/main/java/com/example/demo/runner/HelloApplicationRunner.java
class HelloApplicationRunner (line 10) | @Component
method run (line 12) | @Override
FILE: 45.Spring-Boot-SpringApplication/src/main/java/com/example/demo/runner/HelloCommandLineRunner.java
class HelloCommandLineRunner (line 9) | @Component
method run (line 11) | @Override
FILE: 45.Spring-Boot-SpringApplication/src/test/java/com/example/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 46.Spring-Boot-Hibernate-Validator/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 46.Spring-Boot-Hibernate-Validator/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 15) | @RestController
method test1 (line 19) | @GetMapping("test1")
method test2 (line 26) | @GetMapping("test2")
FILE: 46.Spring-Boot-Hibernate-Validator/src/main/java/com/example/demo/domain/User.java
class User (line 10) | public class User implements Serializable {
method getName (line 19) | public String getName() {
method setName (line 23) | public void setName(String name) {
method getEmail (line 27) | public String getEmail() {
method setEmail (line 31) | public void setEmail(String email) {
FILE: 46.Spring-Boot-Hibernate-Validator/src/main/java/com/example/demo/handler/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 22) | @RestControllerAdvice
method handleConstraintViolationException (line 32) | @ExceptionHandler(value = ConstraintViolationException.class)
method validExceptionHandler (line 52) | @ExceptionHandler(BindException.class)
FILE: 46.Spring-Boot-Hibernate-Validator/src/test/java/com/example/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 47.Spring-Boot-Content-Negotiation/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 47.Spring-Boot-Content-Negotiation/src/main/java/com/example/demo/config/WebConfigurer.java
class WebConfigurer (line 21) | @Configuration
method init (line 28) | @PostConstruct
method extendMessageConverters (line 51) | public void extendMessageConverters(List<HttpMessageConverter<?>> conv...
FILE: 47.Spring-Boot-Content-Negotiation/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 15) | @Controller
method getUser (line 18) | @GetMapping(value = "test", consumes = "text/properties")
method getUser1 (line 24) | @GetMapping(value = "test1", consumes = "text/properties")
FILE: 47.Spring-Boot-Content-Negotiation/src/main/java/com/example/demo/converter/PropertiesHttpMessageConverter.java
class PropertiesHttpMessageConverter (line 19) | public class PropertiesHttpMessageConverter extends AbstractGenericHttpM...
method PropertiesHttpMessageConverter (line 21) | public PropertiesHttpMessageConverter() {
method writeInternal (line 25) | @Override
method readInternal (line 46) | @Override
method read (line 69) | @Override
FILE: 47.Spring-Boot-Content-Negotiation/src/main/java/com/example/demo/handler/PropertiesHandlerMethodReturnValueHandler.java
class PropertiesHandlerMethodReturnValueHandler (line 21) | public class PropertiesHandlerMethodReturnValueHandler implements Handle...
method supportsReturnType (line 23) | @Override
method handleReturnValue (line 28) | @Override
FILE: 47.Spring-Boot-Content-Negotiation/src/main/java/com/example/demo/resolver/PropertiesHandlerMethodArgumentResolver.java
class PropertiesHandlerMethodArgumentResolver (line 20) | public class PropertiesHandlerMethodArgumentResolver implements HandlerM...
method supportsParameter (line 21) | @Override
method resolveArgument (line 26) | @Override
FILE: 47.Spring-Boot-Content-Negotiation/src/test/java/com/example/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 48.Spring-Boot-CORS-Support/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 48.Spring-Boot-CORS-Support/src/main/java/com/example/demo/config/WebConfigurer.java
class WebConfigurer (line 15) | @Configuration
method corsFilter (line 25) | @Bean
FILE: 48.Spring-Boot-CORS-Support/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 11) | @Controller
method index (line 14) | @RequestMapping("index")
method hello (line 19) | @RequestMapping("hello")
FILE: 48.Spring-Boot-CORS-Support/src/test/java/com/example/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 49.Spring-Boot-Async/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 7) | @SpringBootApplication
method main (line 11) | public static void main(String[] args) {
FILE: 49.Spring-Boot-Async/src/main/java/com/example/demo/config/AsyncPoolConfig.java
class AsyncPoolConfig (line 12) | @Configuration
method asyncThreadPoolTaskExecutor (line 15) | @Bean
FILE: 49.Spring-Boot-Async/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 16) | @RestController
method testAsync (line 24) | @GetMapping("async")
method testSync (line 40) | @GetMapping("sync")
FILE: 49.Spring-Boot-Async/src/main/java/com/example/demo/service/TestService.java
class TestService (line 15) | @Service
method asyncMethod (line 20) | @Async("asyncThreadPoolTaskExecutor")
method syncMethod (line 28) | public void syncMethod() {
method sleep (line 32) | private void sleep() {
FILE: 49.Spring-Boot-Async/src/test/java/com/example/demo/DemoApplicationTests.java
class DemoApplicationTests (line 8) | @RunWith(SpringRunner.class)
method contextLoads (line 12) | @Test
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/DemoApplication.java
class DemoApplication (line 15) | @SpringBootApplication
method main (line 18) | public static void main(String[] args) {
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/condition/MyCondition.java
class MyCondition (line 10) | public class MyCondition implements Condition {
method matches (line 11) | @Override
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/config/WebConfig.java
class WebConfig (line 20) | @Configuration
method user (line 35) | @Bean
method cherryFactoryBean (line 44) | @Bean
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/controller/UserController.java
class UserController (line 8) | @Controller
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/dao/UserMapper.java
class UserMapper (line 8) | @Repository
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/domain/Apple.java
class Apple (line 6) | public class Apple {
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/domain/Banana.java
class Banana (line 6) | public class Banana {
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/domain/Cherry.java
class Cherry (line 6) | public class Cherry {
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/domain/Hello.java
class Hello (line 6) | public class Hello {
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/domain/Strawberry.java
class Strawberry (line 6) | public class Strawberry {
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/domain/User.java
class User (line 9) | @ToString
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/domain/UserDetail.java
class UserDetail (line 9) | public class UserDetail extends User {
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/domain/Watermelon.java
class Watermelon (line 6) | public class Watermelon {
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/factory/CherryFactoryBean.java
class CherryFactoryBean (line 9) | public class CherryFactoryBean implements FactoryBean<Cherry> {
method getObject (line 10) | @Override
method getObjectType (line 15) | @Override
method isSingleton (line 20) | @Override
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/filter/MyTypeFilter.java
class MyTypeFilter (line 16) | public class MyTypeFilter implements TypeFilter {
method match (line 17) | @Override
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/register/MyImportBeanDefinitionRegistrar.java
class MyImportBeanDefinitionRegistrar (line 12) | public class MyImportBeanDefinitionRegistrar implements ImportBeanDefini...
method registerBeanDefinitions (line 13) | @Override
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/selector/MyImportSelector.java
class MyImportSelector (line 9) | public class MyImportSelector implements ImportSelector {
method selectImports (line 11) | @Override
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/service/CalculateService.java
type CalculateService (line 6) | public interface CalculateService {
method sum (line 8) | Integer sum(Integer... value);
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/service/UserService.java
class UserService (line 8) | @Service
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/service/impl/Java7CalculateServiceImpl.java
class Java7CalculateServiceImpl (line 10) | @Service
method sum (line 14) | @Override
FILE: 50.Spring-Regist-Bean/src/main/java/cc/mrbird/demo/service/impl/Java8CalculateServiceImpl.java
class Java8CalculateServiceImpl (line 12) | @Service
method sum (line 16) | @Override
FILE: 51.Spring-Bean-Lifecycle/src/main/java/cc/mrbird/DemoApplication.java
class DemoApplication (line 9) | @SpringBootApplication
method main (line 12) | public static void main(String[] args) {
FILE: 51.Spring-Bean-Lifecycle/src/main/java/cc/mrbird/demo/config/MyBeanPostProcessor.java
class MyBeanPostProcessor (line 10) | public class MyBeanPostProcessor implements BeanPostProcessor {
method postProcessBeforeInitialization (line 12) | @Override
method postProcessAfterInitialization (line 18) | @Override
FILE: 51.Spring-Bean-Lifecycle/src/main/java/cc/mrbird/demo/config/WebConfig.java
class WebConfig (line 13) | @Configuration
method fish (line 27) | @Bean
method myBeanPostProcessor (line 32) | @Bean
FILE: 51.Spring-Bean-Lifecycle/src/main/java/cc/mrbird/demo/domain/Bird.java
class Bird (line 9) | public class Bird implements InitializingBean, DisposableBean {
method Bird (line 11) | public Bird() {
method destroy (line 15) | @Override
method afterPropertiesSet (line 20) | @Override
FILE: 51.Spring-Bean-Lifecycle/src/main/java/cc/mrbird/demo/domain/Fish.java
class Fish (line 9) | public class Fish {
method Fish (line 11) | public Fish() {
method init (line 15) | @PostConstruct
method destory (line 20) | @PreDestroy
FILE: 51.Spring-Bean-Lifecycle/src/main/java/cc/mrbird/demo/domain/User.java
class User (line 6) | public class User {
method User (line 8) | public User() {
method init (line 12) | public void init() {
method destory (line 16) | public void destory() {
FILE: 52.Dubbo-OPS-Mointor/spring-boot-dubbo-applicaiton/common-api/src/main/java/cc/mrbird/common/api/HelloService.java
type HelloService (line 3) | public interface HelloService {
method hello (line 4) | String hello(String message);
FILE: 52.Dubbo-OPS-Mointor/spring-boot-dubbo-applicaiton/server-consumer/src/main/java/cc/mrbird/ConsumerApplicaiton.java
class ConsumerApplicaiton (line 7) | @EnableDubbo
method main (line 10) | public static void main(String[] args) {
FILE: 52.Dubbo-OPS-Mointor/spring-boot-dubbo-applicaiton/server-consumer/src/main/java/cc/mrbird/consumer/controller/HelloController.java
class HelloController (line 9) | @RestController
method hello (line 15) | @GetMapping("/hello/{message}")
FILE: 52.Dubbo-OPS-Mointor/spring-boot-dubbo-applicaiton/server-provider/src/main/java/cc/mrbird/ProviderApplicaiton.java
class ProviderApplicaiton (line 7) | @EnableDubbo
method main (line 10) | public static void main(String[] args) {
FILE: 52.Dubbo-OPS-Mointor/spring-boot-dubbo-applicaiton/server-provider/src/main/java/cc/mrbird/provider/service/HelloServiceImpl.java
class HelloServiceImpl (line 7) | @Service(interfaceClass = HelloService.class)
method hello (line 10) | @Override
FILE: 53.Dubbo-High-Availability/common-api/src/main/java/cc/mrbird/common/api/HelloService.java
type HelloService (line 3) | public interface HelloService {
method hello (line 4) | String hello(String message);
FILE: 53.Dubbo-High-Availability/server-consumer/src/main/java/cc/mrbird/ConsumerApplicaiton.java
class ConsumerApplicaiton (line 7) | @EnableDubbo
method main (line 10) | public static void main(String[] args) {
FILE: 53.Dubbo-High-Availability/server-consumer/src/main/java/cc/mrbird/consumer/controller/HelloController.java
class HelloController (line 9) | @RestController
method hello (line 17) | @GetMapping("/hello/{message}")
FILE: 53.Dubbo-High-Availability/server-provider/src/main/java/cc/mrbird/ProviderApplicaiton.java
class ProviderApplicaiton (line 8) | @EnableHystrix
method main (line 12) | public static void main(String[] args) {
FILE: 53.Dubbo-High-Availability/server-provider/src/main/java/cc/mrbird/provider/service/HelloServiceImpl.java
class HelloServiceImpl (line 11) | @Service(
method hello (line 18) | @Override
method defaultHello (line 32) | public String defaultHello(String message) {
FILE: 54.Spring-Boot-Kafka/src/main/java/com/example/demo/KafkaApplication.java
class KafkaApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 54.Spring-Boot-Kafka/src/main/java/com/example/demo/config/KafkaConsumerConfig.java
class KafkaConsumerConfig (line 22) | @EnableKafka
method consumerFactory (line 35) | @Bean
method kafkaListenerContainerFactory (line 59) | @Bean
FILE: 54.Spring-Boot-Kafka/src/main/java/com/example/demo/config/KafkaProducerConfig.java
class KafkaProducerConfig (line 20) | @Configuration
method producerFactory (line 26) | @Bean
method kafkaTemplate (line 41) | @Bean
FILE: 54.Spring-Boot-Kafka/src/main/java/com/example/demo/controller/SendMessageController.java
class SendMessageController (line 18) | @RestController
method sendMessage (line 44) | @GetMapping("send/{message}")
FILE: 54.Spring-Boot-Kafka/src/main/java/com/example/demo/domain/Message.java
class Message (line 9) | public class Message implements Serializable {
method Message (line 16) | public Message() {
method Message (line 19) | public Message(String from, String message) {
method toString (line 24) | @Override
method getFrom (line 32) | public String getFrom() {
method setFrom (line 36) | public void setFrom(String from) {
method getMessage (line 40) | public String getMessage() {
method setMessage (line 44) | public void setMessage(String message) {
FILE: 54.Spring-Boot-Kafka/src/main/java/com/example/demo/listener/KafkaMessageListener.java
class KafkaMessageListener (line 17) | @Component
method listen (line 33) | @KafkaListener(topics = "test", groupId = "test-consumer")
FILE: 55.Spring-Cloud-Consul/server-consumer/src/main/java/com/example/demo/ServerConsumerApplication.java
class ServerConsumerApplication (line 7) | @EnableDiscoveryClient
method main (line 11) | public static void main(String[] args) {
FILE: 55.Spring-Cloud-Consul/server-consumer/src/main/java/com/example/demo/TestController.java
class TestController (line 20) | @RestController
method getServerUris (line 37) | @GetMapping("uri")
method hello (line 44) | @GetMapping("hello")
FILE: 55.Spring-Cloud-Consul/server-proivder/src/main/java/com/example/demo/ServerProviderApplication.java
class ServerProviderApplication (line 7) | @EnableDiscoveryClient
method main (line 10) | public static void main(String[] args) {
FILE: 55.Spring-Cloud-Consul/server-proivder/src/main/java/com/example/demo/TestController.java
class TestController (line 11) | @RestController
method check (line 16) | @GetMapping("check")
method hello (line 22) | @GetMapping("hello")
FILE: 56.Spring-Boot-MongoDB-crud/src/main/java/com/example/mongodb/MongodbApplication.java
class MongodbApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 56.Spring-Boot-MongoDB-crud/src/main/java/com/example/mongodb/controller/UserController.java
class UserController (line 14) | @RestController
method getUsers (line 21) | @GetMapping
method createUser (line 26) | @PostMapping
method deleteUser (line 31) | @DeleteMapping("/{id}")
method updateUser (line 36) | @PutMapping("/{id}")
method getUser (line 45) | @GetMapping("/{id}")
method getUserByAge (line 53) | @GetMapping("/age/{from}/{to}")
method getUserByName (line 61) | @GetMapping("/name/{name}")
method getUserByDescription (line 69) | @GetMapping("/description/{description}")
method getUserByCondition (line 77) | @GetMapping("/condition")
FILE: 56.Spring-Boot-MongoDB-crud/src/main/java/com/example/mongodb/dao/UserDao.java
type UserDao (line 12) | @Repository
method findByAgeBetween (line 22) | List<User> findByAgeBetween(Integer from, Integer to);
method findByAgeBetweenAndNameEqualsAndDescriptionIsLike (line 34) | List<User> findByAgeBetweenAndNameEqualsAndDescriptionIsLike(Integer f...
method findByDescriptionIsLike (line 42) | List<User> findByDescriptionIsLike(String description);
method findByNameEquals (line 50) | List<User> findByNameEquals(String name);
FILE: 56.Spring-Boot-MongoDB-crud/src/main/java/com/example/mongodb/domain/User.java
class User (line 10) | @Document(collection = "user")
method getId (line 22) | public String getId() {
method setId (line 26) | public void setId(String id) {
method getName (line 30) | public String getName() {
method setName (line 34) | public void setName(String name) {
method getAge (line 38) | public Integer getAge() {
method setAge (line 42) | public void setAge(Integer age) {
method getDescription (line 46) | public String getDescription() {
method setDescription (line 50) | public void setDescription(String description) {
FILE: 56.Spring-Boot-MongoDB-crud/src/main/java/com/example/mongodb/service/UserService.java
class UserService (line 23) | @Service
method getUsers (line 31) | public List<User> getUsers() {
method getUser (line 35) | public Optional<User> getUser(String id) {
method createUser (line 43) | public User createUser(User user) {
method deleteUser (line 48) | public void deleteUser(String id) {
method updateUser (line 53) | public void updateUser(String id, User user) {
method getUserByAge (line 65) | public List<User> getUserByAge(Integer from, Integer to) {
method getUserByName (line 69) | public List<User> getUserByName(String name) {
method getUserByDescription (line 73) | public List<User> getUserByDescription(String description) {
method getUserByCondition (line 77) | public Page<User> getUserByCondition(int size, int page, User user) {
FILE: 57.Spring-Boot-WebFlux/async-servlet/src/AsyncServlet.java
class AsyncServlet (line 16) | @WebServlet(urlPatterns = "/async", asyncSupported = true)
method doGet (line 22) | @Override
method execute (line 31) | private void execute(AsyncContext asyncContext, ServletRequest request...
FILE: 57.Spring-Boot-WebFlux/async-servlet/src/SyncServlet.java
class SyncServlet (line 12) | @WebServlet(urlPatterns = "/sync")
method doGet (line 19) | @Override
method execute (line 27) | private void execute(HttpServletRequest request, HttpServletResponse r...
FILE: 57.Spring-Boot-WebFlux/webflux/src/main/java/com/example/webflux/FluxTest.java
class FluxTest (line 14) | public class FluxTest {
method main (line 16) | public static void main(String[] args) throws InterruptedException {
FILE: 57.Spring-Boot-WebFlux/webflux/src/main/java/com/example/webflux/MonoFluxTest.java
class MonoFluxTest (line 11) | public class MonoFluxTest {
method main (line 13) | public static void main(String[] args) {
FILE: 57.Spring-Boot-WebFlux/webflux/src/main/java/com/example/webflux/MonoTest.java
class MonoTest (line 10) | public class MonoTest {
method main (line 12) | public static void main(String[] args) {
FILE: 57.Spring-Boot-WebFlux/webflux/src/main/java/com/example/webflux/TestController.java
class TestController (line 17) | @RestController
method sync (line 24) | @GetMapping("sync")
method asyncMono (line 32) | @GetMapping("async/mono")
method asyncFlux (line 43) | @GetMapping(value = "async/flux", produces = MediaType.TEXT_EVENT_STRE...
method execute (line 58) | private String execute() {
FILE: 57.Spring-Boot-WebFlux/webflux/src/main/java/com/example/webflux/ViewController.java
class ViewController (line 9) | @Controller
method flux (line 12) | @GetMapping("flux")
FILE: 57.Spring-Boot-WebFlux/webflux/src/main/java/com/example/webflux/WebfluxApplication.java
class WebfluxApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 58.Spring-Boot-WebFlux-crud/src/main/java/com/example/webflux/WebfluxApplication.java
class WebfluxApplication (line 7) | @SpringBootApplication
method main (line 10) | public static void main(String[] args) {
FILE: 58.Spring-Boot-WebFlux-crud/src/main/java/com/example/webflux/controller/UserController.java
class UserController (line 16) | @RestController
method getUsers (line 26) | @GetMapping
method getUsersStream (line 34) | @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_...
method createUser (line 39) | @PostMapping
method deleteUser (line 47) | @DeleteMapping("/{id}")
method updateUser (line 58) | @PutMapping("/{id}")
method getUser (line 69) | @GetMapping("/{id}")
method getUserByAge (line 79) | @GetMapping("/age/{from}/{to}")
method getUserByAgeStream (line 84) | @GetMapping(value = "/stream/age/{from}/{to}", produces = MediaType.TE...
method getUserByName (line 92) | @GetMapping("/name/{name}")
method getUserByNameStream (line 97) | @GetMapping(value = "/stream/name/{name}", produces = MediaType.TEXT_E...
method getUserByDescription (line 105) | @GetMapping("/description/{description}")
method getUserByDescriptionStream (line 110) | @GetMapping(value = "/stream/description/{description}", produces = Me...
method getUserByCondition (line 118) | @GetMapping("/condition")
method getUserByConditionCount (line 123) | @GetMapping("/condition/count")
FILE: 58.Spring-Boot-WebFlux-crud/src/main/java/com/example/webflux/dao/UserDao.java
type UserDao (line 11) | @Repository
method findByAgeBetween (line 21) | Flux<User> findByAgeBetween(Integer from, Integer to);
method findByDescriptionIsLike (line 29) | Flux<User> findByDescriptionIsLike(String description);
method findByNameEquals (line 37) | Flux<User> findByNameEquals(String name);
FILE: 58.Spring-Boot-WebFlux-crud/src/main/java/com/example/webflux/domain/User.java
class User (line 9) | @Document(collection = "user")
method getId (line 18) | public String getId() {
method setId (line 22) | public void setId(String id) {
method getName (line 26) | public String getName() {
method setName (line 30) | public void setName(String name) {
method getAge (line 34) | public Integer getAge() {
method setAge (line 38) | public void setAge(Integer age) {
method getDescription (line 42) | public String getDescription() {
method setDescription (line 46) | public void setDescription(String description) {
FILE: 58.Spring-Boot-WebFlux-crud/src/main/java/com/example/webflux/service/UserService.java
class UserService (line 20) | @Service
method getUsers (line 28) | public Flux<User> getUsers() {
method getUser (line 32) | public Mono<User> getUser(String id) {
method createUser (line 40) | public Mono<User> createUser(User user) {
method deleteUser (line 44) | public Mono<Void> deleteUser(String id) {
method updateUser (line 49) | public Mono<User> updateUser(String id, User user) {
method getUserByAge (line 59) | public Flux<User> getUserByAge(Integer from, Integer to) {
method getUserByName (line 63) | public Flux<User> getUserByName(String name) {
method getUserByDescription (line 67) | public Flux<User> getUserByDescription(String description) {
method getUserByCondition (line 75) | public Flux<User> getUserByCondition(int size, int page, User user) {
method getUserByConditionCount (line 86) | public Mono<Long> getUserByConditionCount(User user) {
method getQuery (line 91) | private Query getQuery(User user) {
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/SecurityApplication.java
class SecurityApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/domain/MyUser.java
class MyUser (line 5) | public class MyUser implements Serializable {
method getUserName (line 20) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 28) | public String getPassword() {
method setPassword (line 32) | public void setPassword(String password) {
method isAccountNonExpired (line 36) | public boolean isAccountNonExpired() {
method setAccountNonExpired (line 40) | public void setAccountNonExpired(boolean accountNonExpired) {
method isAccountNonLocked (line 44) | public boolean isAccountNonLocked() {
method setAccountNonLocked (line 48) | public void setAccountNonLocked(boolean accountNonLocked) {
method isCredentialsNonExpired (line 52) | public boolean isCredentialsNonExpired() {
method setCredentialsNonExpired (line 56) | public void setCredentialsNonExpired(boolean credentialsNonExpired) {
method isEnabled (line 60) | public boolean isEnabled() {
method setEnabled (line 64) | public void setEnabled(boolean enabled) {
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/handler/MyAuthenticationFailureHandler.java
class MyAuthenticationFailureHandler (line 16) | @Component
method onAuthenticationFailure (line 22) | @Override
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/handler/MyAuthenticationSucessHandler.java
class MyAuthenticationSucessHandler (line 20) | @Component
method onAuthenticationSuccess (line 30) | @Override
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/security/browser/BrowserSecurityConfig.java
class BrowserSecurityConfig (line 18) | @Configuration
method passwordEncoder (line 38) | @Bean
method configure (line 43) | @Override
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/security/browser/UserDetailService.java
class UserDetailService (line 13) | @Configuration
method loadUserByUsername (line 19) | @Override
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/session/MySessionExpiredStrategy.java
class MySessionExpiredStrategy (line 15) | @Component
method onExpiredSessionDetected (line 18) | @Override
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/validate/code/ImageCode.java
class ImageCode (line 7) | public class ImageCode implements Serializable {
method ImageCode (line 16) | public ImageCode(BufferedImage image, String code, int expireIn) {
method ImageCode (line 22) | public ImageCode(BufferedImage image, String code, LocalDateTime expir...
method isExpire (line 28) | boolean isExpire() {
method getImage (line 32) | public BufferedImage getImage() {
method setImage (line 36) | public void setImage(BufferedImage image) {
method getCode (line 40) | public String getCode() {
method setCode (line 44) | public void setCode(String code) {
method getExpireTime (line 48) | public LocalDateTime getExpireTime() {
method setExpireTime (line 52) | public void setExpireTime(LocalDateTime expireTime) {
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/validate/code/ValidateCodeException.java
class ValidateCodeException (line 5) | public class ValidateCodeException extends AuthenticationException {
method ValidateCodeException (line 8) | public ValidateCodeException(String message) {
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/validate/code/ValidateCodeFilter.java
class ValidateCodeFilter (line 21) | @Component
method doFilterInternal (line 29) | @Override
method validateCode (line 43) | private void validateCode(ServletWebRequest servletWebRequest) throws ...
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationConfig.java
class SmsAuthenticationConfig (line 14) | @Component
method configure (line 26) | @Override
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationFilter.java
class SmsAuthenticationFilter (line 13) | public class SmsAuthenticationFilter extends AbstractAuthenticationProce...
method SmsAuthenticationFilter (line 21) | public SmsAuthenticationFilter() {
method attemptAuthentication (line 26) | public Authentication attemptAuthentication(HttpServletRequest request,
method obtainMobile (line 48) | protected String obtainMobile(HttpServletRequest request) {
method setDetails (line 52) | protected void setDetails(HttpServletRequest request,
method setMobileParameter (line 57) | public void setMobileParameter(String mobileParameter) {
method setPostOnly (line 62) | public void setPostOnly(boolean postOnly) {
method getMobileParameter (line 66) | public final String getMobileParameter() {
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationProvider.java
class SmsAuthenticationProvider (line 10) | public class SmsAuthenticationProvider implements AuthenticationProvider {
method authenticate (line 14) | @Override
method supports (line 29) | @Override
method getUserDetailService (line 34) | public UserDetailService getUserDetailService() {
method setUserDetailService (line 38) | public void setUserDetailService(UserDetailService userDetailService) {
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationToken.java
class SmsAuthenticationToken (line 9) | public class SmsAuthenticationToken extends AbstractAuthenticationToken {
method SmsAuthenticationToken (line 15) | public SmsAuthenticationToken(String mobile) {
method SmsAuthenticationToken (line 21) | public SmsAuthenticationToken(Object principal, Collection<? extends G...
method getCredentials (line 27) | @Override
method getPrincipal (line 32) | public Object getPrincipal() {
method setAuthenticated (line 36) | public void setAuthenticated(boolean isAuthenticated) throws IllegalAr...
method eraseCredentials (line 45) | @Override
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/validate/smscode/SmsCode.java
class SmsCode (line 5) | public class SmsCode {
method SmsCode (line 11) | public SmsCode(String code, int expireIn) {
method SmsCode (line 16) | public SmsCode(String code, LocalDateTime expireTime) {
method isExpire (line 21) | boolean isExpire() {
method getCode (line 25) | public String getCode() {
method setCode (line 29) | public void setCode(String code) {
method getExpireTime (line 33) | public LocalDateTime getExpireTime() {
method setExpireTime (line 37) | public void setExpireTime(LocalDateTime expireTime) {
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/validate/smscode/SmsCodeFilter.java
class SmsCodeFilter (line 22) | @Component
method doFilterInternal (line 30) | @Override
method validateCode (line 44) | private void validateCode(ServletWebRequest servletWebRequest) throws ...
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/web/controller/BrowserSecurityController.java
class BrowserSecurityController (line 21) | @RestController
method requireAuthentication (line 28) | @GetMapping("/authentication/require")
method sessionInvalid (line 40) | @GetMapping("/session/invalid")
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/web/controller/TestController.java
class TestController (line 8) | @RestController
method hello (line 10) | @GetMapping("hello")
method index (line 15) | @GetMapping("index")
FILE: 59.Spring-Security-SessionManager/src/main/java/cc/mrbird/web/controller/ValidateController.java
class ValidateController (line 20) | @RestController
method createCode (line 29) | @GetMapping("/code/image")
method createSmsCode (line 37) | @GetMapping("/code/sms")
method createSMSCode (line 45) | private SmsCode createSMSCode() {
method createImageCode (line 50) | private ImageCode createImageCode() {
method getRandColor (line 87) | private Color getRandColor(int fc, int bc) {
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/SecurityApplication.java
class SecurityApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/domain/MyUser.java
class MyUser (line 5) | public class MyUser implements Serializable {
method getUserName (line 20) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 28) | public String getPassword() {
method setPassword (line 32) | public void setPassword(String password) {
method isAccountNonExpired (line 36) | public boolean isAccountNonExpired() {
method setAccountNonExpired (line 40) | public void setAccountNonExpired(boolean accountNonExpired) {
method isAccountNonLocked (line 44) | public boolean isAccountNonLocked() {
method setAccountNonLocked (line 48) | public void setAccountNonLocked(boolean accountNonLocked) {
method isCredentialsNonExpired (line 52) | public boolean isCredentialsNonExpired() {
method setCredentialsNonExpired (line 56) | public void setCredentialsNonExpired(boolean credentialsNonExpired) {
method isEnabled (line 60) | public boolean isEnabled() {
method setEnabled (line 64) | public void setEnabled(boolean enabled) {
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/handler/MyAuthenticationFailureHandler.java
class MyAuthenticationFailureHandler (line 16) | @Component
method onAuthenticationFailure (line 22) | @Override
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/handler/MyAuthenticationSucessHandler.java
class MyAuthenticationSucessHandler (line 20) | @Component
method onAuthenticationSuccess (line 30) | @Override
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/handler/MyLogOutSuccessHandler.java
class MyLogOutSuccessHandler (line 16) | @Component
method onLogoutSuccess (line 19) | @Override
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/security/browser/BrowserSecurityConfig.java
class BrowserSecurityConfig (line 19) | @Configuration
method passwordEncoder (line 42) | @Bean
method configure (line 47) | @Override
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/security/browser/UserDetailService.java
class UserDetailService (line 13) | @Configuration
method loadUserByUsername (line 19) | @Override
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/session/MySessionExpiredStrategy.java
class MySessionExpiredStrategy (line 15) | @Component
method onExpiredSessionDetected (line 18) | @Override
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/validate/code/ImageCode.java
class ImageCode (line 7) | public class ImageCode implements Serializable {
method ImageCode (line 16) | public ImageCode(BufferedImage image, String code, int expireIn) {
method ImageCode (line 22) | public ImageCode(BufferedImage image, String code, LocalDateTime expir...
method isExpire (line 28) | boolean isExpire() {
method getImage (line 32) | public BufferedImage getImage() {
method setImage (line 36) | public void setImage(BufferedImage image) {
method getCode (line 40) | public String getCode() {
method setCode (line 44) | public void setCode(String code) {
method getExpireTime (line 48) | public LocalDateTime getExpireTime() {
method setExpireTime (line 52) | public void setExpireTime(LocalDateTime expireTime) {
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/validate/code/ValidateCodeException.java
class ValidateCodeException (line 5) | public class ValidateCodeException extends AuthenticationException {
method ValidateCodeException (line 8) | public ValidateCodeException(String message) {
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/validate/code/ValidateCodeFilter.java
class ValidateCodeFilter (line 21) | @Component
method doFilterInternal (line 29) | @Override
method validateCode (line 43) | private void validateCode(ServletWebRequest servletWebRequest) throws ...
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationConfig.java
class SmsAuthenticationConfig (line 14) | @Component
method configure (line 26) | @Override
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationFilter.java
class SmsAuthenticationFilter (line 13) | public class SmsAuthenticationFilter extends AbstractAuthenticationProce...
method SmsAuthenticationFilter (line 21) | public SmsAuthenticationFilter() {
method attemptAuthentication (line 26) | public Authentication attemptAuthentication(HttpServletRequest request,
method obtainMobile (line 48) | protected String obtainMobile(HttpServletRequest request) {
method setDetails (line 52) | protected void setDetails(HttpServletRequest request,
method setMobileParameter (line 57) | public void setMobileParameter(String mobileParameter) {
method setPostOnly (line 62) | public void setPostOnly(boolean postOnly) {
method getMobileParameter (line 66) | public final String getMobileParameter() {
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationProvider.java
class SmsAuthenticationProvider (line 10) | public class SmsAuthenticationProvider implements AuthenticationProvider {
method authenticate (line 14) | @Override
method supports (line 29) | @Override
method getUserDetailService (line 34) | public UserDetailService getUserDetailService() {
method setUserDetailService (line 38) | public void setUserDetailService(UserDetailService userDetailService) {
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationToken.java
class SmsAuthenticationToken (line 9) | public class SmsAuthenticationToken extends AbstractAuthenticationToken {
method SmsAuthenticationToken (line 15) | public SmsAuthenticationToken(String mobile) {
method SmsAuthenticationToken (line 21) | public SmsAuthenticationToken(Object principal, Collection<? extends G...
method getCredentials (line 27) | @Override
method getPrincipal (line 32) | public Object getPrincipal() {
method setAuthenticated (line 36) | public void setAuthenticated(boolean isAuthenticated) throws IllegalAr...
method eraseCredentials (line 45) | @Override
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/validate/smscode/SmsCode.java
class SmsCode (line 5) | public class SmsCode {
method SmsCode (line 11) | public SmsCode(String code, int expireIn) {
method SmsCode (line 16) | public SmsCode(String code, LocalDateTime expireTime) {
method isExpire (line 21) | boolean isExpire() {
method getCode (line 25) | public String getCode() {
method setCode (line 29) | public void setCode(String code) {
method getExpireTime (line 33) | public LocalDateTime getExpireTime() {
method setExpireTime (line 37) | public void setExpireTime(LocalDateTime expireTime) {
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/validate/smscode/SmsCodeFilter.java
class SmsCodeFilter (line 22) | @Component
method doFilterInternal (line 30) | @Override
method validateCode (line 44) | private void validateCode(ServletWebRequest servletWebRequest) throws ...
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/web/controller/BrowserSecurityController.java
class BrowserSecurityController (line 21) | @RestController
method requireAuthentication (line 28) | @GetMapping("/authentication/require")
method sessionInvalid (line 40) | @GetMapping("/session/invalid")
method signout (line 46) | @GetMapping("/signout/success")
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/web/controller/TestController.java
class TestController (line 8) | @RestController
method hello (line 10) | @GetMapping("hello")
method index (line 15) | @GetMapping("index")
FILE: 60.Spring-Security-Logout/src/main/java/cc/mrbird/web/controller/ValidateController.java
class ValidateController (line 20) | @RestController
method createCode (line 29) | @GetMapping("/code/image")
method createSmsCode (line 37) | @GetMapping("/code/sms")
method createSMSCode (line 45) | private SmsCode createSMSCode() {
method createImageCode (line 50) | private ImageCode createImageCode() {
method getRandColor (line 87) | private Color getRandColor(int fc, int bc) {
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/SecurityApplication.java
class SecurityApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/domain/MyUser.java
class MyUser (line 5) | public class MyUser implements Serializable {
method getUserName (line 20) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 28) | public String getPassword() {
method setPassword (line 32) | public void setPassword(String password) {
method isAccountNonExpired (line 36) | public boolean isAccountNonExpired() {
method setAccountNonExpired (line 40) | public void setAccountNonExpired(boolean accountNonExpired) {
method isAccountNonLocked (line 44) | public boolean isAccountNonLocked() {
method setAccountNonLocked (line 48) | public void setAccountNonLocked(boolean accountNonLocked) {
method isCredentialsNonExpired (line 52) | public boolean isCredentialsNonExpired() {
method setCredentialsNonExpired (line 56) | public void setCredentialsNonExpired(boolean credentialsNonExpired) {
method isEnabled (line 60) | public boolean isEnabled() {
method setEnabled (line 64) | public void setEnabled(boolean enabled) {
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/handler/MyAuthenticationAccessDeniedHandler.java
class MyAuthenticationAccessDeniedHandler (line 15) | @Component
method handle (line 18) | @Override
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/handler/MyAuthenticationFailureHandler.java
class MyAuthenticationFailureHandler (line 16) | @Component
method onAuthenticationFailure (line 22) | @Override
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/handler/MyAuthenticationSucessHandler.java
class MyAuthenticationSucessHandler (line 20) | @Component
method onAuthenticationSuccess (line 30) | @Override
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/handler/MyLogOutSuccessHandler.java
class MyLogOutSuccessHandler (line 16) | @Component
method onLogoutSuccess (line 19) | @Override
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/security/browser/BrowserSecurityConfig.java
class BrowserSecurityConfig (line 21) | @Configuration
method passwordEncoder (line 47) | @Bean
method configure (line 52) | @Override
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/security/browser/UserDetailService.java
class UserDetailService (line 18) | @Configuration
method loadUserByUsername (line 24) | @Override
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/session/MySessionExpiredStrategy.java
class MySessionExpiredStrategy (line 15) | @Component
method onExpiredSessionDetected (line 18) | @Override
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/validate/code/ImageCode.java
class ImageCode (line 7) | public class ImageCode implements Serializable {
method ImageCode (line 16) | public ImageCode(BufferedImage image, String code, int expireIn) {
method ImageCode (line 22) | public ImageCode(BufferedImage image, String code, LocalDateTime expir...
method isExpire (line 28) | boolean isExpire() {
method getImage (line 32) | public BufferedImage getImage() {
method setImage (line 36) | public void setImage(BufferedImage image) {
method getCode (line 40) | public String getCode() {
method setCode (line 44) | public void setCode(String code) {
method getExpireTime (line 48) | public LocalDateTime getExpireTime() {
method setExpireTime (line 52) | public void setExpireTime(LocalDateTime expireTime) {
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/validate/code/ValidateCodeException.java
class ValidateCodeException (line 5) | public class ValidateCodeException extends AuthenticationException {
method ValidateCodeException (line 8) | public ValidateCodeException(String message) {
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/validate/code/ValidateCodeFilter.java
class ValidateCodeFilter (line 21) | @Component
method doFilterInternal (line 29) | @Override
method validateCode (line 43) | private void validateCode(ServletWebRequest servletWebRequest) throws ...
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationConfig.java
class SmsAuthenticationConfig (line 14) | @Component
method configure (line 26) | @Override
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationFilter.java
class SmsAuthenticationFilter (line 13) | public class SmsAuthenticationFilter extends AbstractAuthenticationProce...
method SmsAuthenticationFilter (line 21) | public SmsAuthenticationFilter() {
method attemptAuthentication (line 26) | public Authentication attemptAuthentication(HttpServletRequest request,
method obtainMobile (line 48) | protected String obtainMobile(HttpServletRequest request) {
method setDetails (line 52) | protected void setDetails(HttpServletRequest request,
method setMobileParameter (line 57) | public void setMobileParameter(String mobileParameter) {
method setPostOnly (line 62) | public void setPostOnly(boolean postOnly) {
method getMobileParameter (line 66) | public final String getMobileParameter() {
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationProvider.java
class SmsAuthenticationProvider (line 10) | public class SmsAuthenticationProvider implements AuthenticationProvider {
method authenticate (line 14) | @Override
method supports (line 29) | @Override
method getUserDetailService (line 34) | public UserDetailService getUserDetailService() {
method setUserDetailService (line 38) | public void setUserDetailService(UserDetailService userDetailService) {
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/validate/smscode/SmsAuthenticationToken.java
class SmsAuthenticationToken (line 9) | public class SmsAuthenticationToken extends AbstractAuthenticationToken {
method SmsAuthenticationToken (line 15) | public SmsAuthenticationToken(String mobile) {
method SmsAuthenticationToken (line 21) | public SmsAuthenticationToken(Object principal, Collection<? extends G...
method getCredentials (line 27) | @Override
method getPrincipal (line 32) | public Object getPrincipal() {
method setAuthenticated (line 36) | public void setAuthenticated(boolean isAuthenticated) throws IllegalAr...
method eraseCredentials (line 45) | @Override
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/validate/smscode/SmsCode.java
class SmsCode (line 5) | public class SmsCode {
method SmsCode (line 11) | public SmsCode(String code, int expireIn) {
method SmsCode (line 16) | public SmsCode(String code, LocalDateTime expireTime) {
method isExpire (line 21) | boolean isExpire() {
method getCode (line 25) | public String getCode() {
method setCode (line 29) | public void setCode(String code) {
method getExpireTime (line 33) | public LocalDateTime getExpireTime() {
method setExpireTime (line 37) | public void setExpireTime(LocalDateTime expireTime) {
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/validate/smscode/SmsCodeFilter.java
class SmsCodeFilter (line 22) | @Component
method doFilterInternal (line 30) | @Override
method validateCode (line 44) | private void validateCode(ServletWebRequest servletWebRequest) throws ...
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/web/controller/BrowserSecurityController.java
class BrowserSecurityController (line 22) | @RestController
method requireAuthentication (line 29) | @GetMapping("/authentication/require")
method sessionInvalid (line 41) | @GetMapping("/session/invalid")
method signout (line 47) | @GetMapping("/signout/success")
method authenticationTest (line 52) | @GetMapping("/auth/admin")
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/web/controller/TestController.java
class TestController (line 8) | @RestController
method hello (line 10) | @GetMapping("hello")
method index (line 15) | @GetMapping("index")
FILE: 61.Spring-security-Permission/src/main/java/cc/mrbird/web/controller/ValidateController.java
class ValidateController (line 20) | @RestController
method createCode (line 29) | @GetMapping("/code/image")
method createSmsCode (line 37) | @GetMapping("/code/sms")
method createSMSCode (line 45) | private SmsCode createSMSCode() {
method createImageCode (line 50) | private ImageCode createImageCode() {
method getRandColor (line 87) | private Color getRandColor(int fc, int bc) {
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/DemoApplication.java
class DemoApplication (line 13) | @SpringBootApplication
method main (line 17) | public static void main(String[] args) {
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/authentication/JWTFilter.java
class JWTFilter (line 23) | public class JWTFilter extends BasicHttpAuthenticationFilter {
method isAccessAllowed (line 31) | @Override
method isLoginAttempt (line 49) | @Override
method executeLogin (line 56) | @Override
method preHandle (line 73) | @Override
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/authentication/JWTToken.java
class JWTToken (line 10) | public class JWTToken implements AuthenticationToken {
method JWTToken (line 18) | public JWTToken(String token) {
method JWTToken (line 22) | public JWTToken(String token, String exipreAt) {
method getPrincipal (line 27) | @Override
method getCredentials (line 32) | @Override
method getToken (line 37) | public String getToken() {
method setToken (line 41) | public void setToken(String token) {
method getExipreAt (line 45) | public String getExipreAt() {
method setExipreAt (line 49) | public void setExipreAt(String exipreAt) {
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/authentication/JWTUtil.java
class JWTUtil (line 20) | public class JWTUtil {
method verify (line 33) | public static boolean verify(String token, String username, String sec...
method getUsername (line 53) | public static String getUsername(String token) {
method sign (line 70) | public static String sign(String username, String secret) {
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/authentication/ShiroConfig.java
class ShiroConfig (line 18) | @Configuration
method shiroFilterFactoryBean (line 21) | @Bean
method securityManager (line 40) | @Bean
method shiroRealm (line 48) | @Bean
method authorizationAttributeSourceAdvisor (line 54) | @Bean
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/authentication/ShiroRealm.java
class ShiroRealm (line 20) | public class ShiroRealm extends AuthorizingRealm {
method supports (line 22) | @Override
method doGetAuthorizationInfo (line 34) | @Override
method doGetAuthenticationInfo (line 56) | @Override
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/controller/LoginController.java
class LoginController (line 24) | @RestController
method login (line 31) | @PostMapping("/login")
method generateUserInfo (line 62) | private Map<String, Object> generateUserInfo(String token, User user) {
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/controller/TestController.java
class TestController (line 12) | @RestController
method test1 (line 19) | @GetMapping("/1")
method test2 (line 27) | @GetMapping("/2")
method test3 (line 36) | @GetMapping("/3")
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/domain/Response.java
class Response (line 9) | public class Response extends HashMap<String, Object> {
method message (line 13) | public Response message(String message) {
method data (line 18) | public Response data(Object data) {
method put (line 23) | @Override
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/domain/User.java
class User (line 9) | public class User implements Serializable {
method User (line 20) | public User(String username, String password, Set<String> role, Set<St...
method getUsername (line 27) | public String getUsername() {
method setUsername (line 31) | public void setUsername(String username) {
method getPassword (line 35) | public String getPassword() {
method setPassword (line 39) | public void setPassword(String password) {
method getRole (line 43) | public Set<String> getRole() {
method setRole (line 47) | public void setRole(Set<String> role) {
method getPermission (line 51) | public Set<String> getPermission() {
method setPermission (line 55) | public void setPermission(Set<String> permission) {
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/exception/SystemException.java
class SystemException (line 8) | public class SystemException extends Exception {
method SystemException (line 12) | public SystemException(String message) {
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/handler/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 29) | @RestControllerAdvice
method handleException (line 35) | @ExceptionHandler(value = Exception.class)
method handleParamsInvalidException (line 42) | @ExceptionHandler(value = SystemException.class)
method validExceptionHandler (line 55) | @ExceptionHandler(BindException.class)
method handleConstraintViolationException (line 74) | @ExceptionHandler(value = ConstraintViolationException.class)
method handleUnauthorizedException (line 88) | @ExceptionHandler(value = UnauthorizedException.class)
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/properties/SystemProperties.java
class SystemProperties (line 10) | @ConfigurationProperties(prefix = "system")
method getAnonUrl (line 23) | public String getAnonUrl() {
method setAnonUrl (line 27) | public void setAnonUrl(String anonUrl) {
method getJwtTimeOut (line 31) | public Long getJwtTimeOut() {
method setJwtTimeOut (line 35) | public void setJwtTimeOut(Long jwtTimeOut) {
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/runner/PrintRunner.java
class PrintRunner (line 12) | @Component
method run (line 17) | @Override
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/utils/DateUtil.java
class DateUtil (line 15) | public class DateUtil {
method formatFullTime (line 21) | public static String formatFullTime(LocalDateTime localDateTime) {
method formatFullTime (line 25) | public static String formatFullTime(LocalDateTime localDateTime, Strin...
method getDateFormat (line 30) | private static String getDateFormat(Date date, String dateFormatType) {
method formatCSTTime (line 35) | public static String formatCSTTime(String date, String format) throws ...
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/utils/MD5Util.java
class MD5Util (line 10) | public class MD5Util {
method MD5Util (line 12) | protected MD5Util(){
method encrypt (line 20) | public static String encrypt(String password) {
method encrypt (line 24) | public static String encrypt(String username, String password) {
method main (line 29) | public static void main(String[] args) {
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/utils/SpringContextUtil.java
class SpringContextUtil (line 14) | @Component
method setApplicationContext (line 18) | @Override
method getBean (line 23) | public static Object getBean(String name) {
method getBean (line 26) | public static <T> T getBean(Class<T> clazz){
method getBean (line 30) | public static <T> T getBean(String name, Class<T> requiredType) {
method containsBean (line 34) | public static boolean containsBean(String name) {
method isSingleton (line 38) | public static boolean isSingleton(String name) {
method getType (line 42) | public static Class<?> getType(String name) {
FILE: 62.Spring-Boot-Shiro-JWT/src/main/java/com/example/demo/utils/SystemUtils.java
class SystemUtils (line 15) | public class SystemUtils {
method users (line 24) | private static List<User> users() {
method getUser (line 48) | public static User getUser(String username) {
FILE: 63.Spring-Security-OAuth2-Guide/src/main/java/cc/mrbird/security/SecurityApplication.java
class SecurityApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 63.Spring-Security-OAuth2-Guide/src/main/java/cc/mrbird/security/config/AuthorizationServerConfig.java
class AuthorizationServerConfig (line 13) | @Configuration
method passwordEncoder (line 17) | @Bean
FILE: 63.Spring-Security-OAuth2-Guide/src/main/java/cc/mrbird/security/config/ResourceServerConfig.java
class ResourceServerConfig (line 9) | @Configuration
FILE: 63.Spring-Security-OAuth2-Guide/src/main/java/cc/mrbird/security/controller/UserController.java
class UserController (line 10) | @RestController
method index (line 13) | @GetMapping("index")
FILE: 63.Spring-Security-OAuth2-Guide/src/main/java/cc/mrbird/security/domain/MyUser.java
class MyUser (line 5) | public class MyUser implements Serializable {
method getUserName (line 20) | public String getUserName() {
method setUserName (line 24) | public void setUserName(String userName) {
method getPassword (line 28) | public String getPassword() {
method setPassword (line 32) | public void setPassword(String password) {
method isAccountNonExpired (line 36) | public boolean isAccountNonExpired() {
method setAccountNonExpired (line 40) | public void setAccountNonExpired(boolean accountNonExpired) {
method isAccountNonLocked (line 44) | public boolean isAccountNonLocked() {
method setAccountNonLocked (line 48) | public void setAccountNonLocked(boolean accountNonLocked) {
method isCredentialsNonExpired (line 52) | public boolean isCredentialsNonExpired() {
method setCredentialsNonExpired (line 56) | public void setCredentialsNonExpired(boolean credentialsNonExpired) {
method isEnabled (line 60) | public boolean isEnabled() {
method setEnabled (line 64) | public void setEnabled(boolean enabled) {
FILE: 63.Spring-Security-OAuth2-Guide/src/main/java/cc/mrbird/security/service/UserDetailService.java
class UserDetailService (line 14) | @Service
method loadUserByUsername (line 20) | @Override
FILE: 64.Spring-Security-OAuth2-Customize/src/main/java/cc/mrbird/security/SecurityApplication.java
class SecurityApplication (line 6) | @SpringBootApplication
method main (line 9) | public static void main(String[] args) {
FILE: 64.Spring-Security-OAuth2-Customize/src/main/jav
Condensed preview — 1050 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,336K chars).
[
{
"path": ".gitignore",
"chars": 48,
"preview": "*/.settings/\n*/target/\n*/.classpath\n*/.project\n\n"
},
{
"path": "01.Start-Spring-Boot/pom.xml",
"chars": 1628,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "01.Start-Spring-Boot/src/main/java/com/springboot/demo/DemoApplication.java",
"chars": 523,
"preview": "package com.springboot.demo;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autocon"
},
{
"path": "01.Start-Spring-Boot/src/main/resources/application.properties",
"chars": 0,
"preview": ""
},
{
"path": "01.Start-Spring-Boot/src/test/java/com/springboot/demo/DemoApplicationTests.java",
"chars": 334,
"preview": "package com.springboot.demo;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.te"
},
{
"path": "02.Spring-Boot-Config/pom.xml",
"chars": 1635,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "02.Spring-Boot-Config/src/main/java/com/springboot/Application.java",
"chars": 663,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "02.Spring-Boot-Config/src/main/java/com/springboot/bean/BlogProperties.java",
"chars": 514,
"preview": "package com.springboot.bean;\n\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.ster"
},
{
"path": "02.Spring-Boot-Config/src/main/java/com/springboot/bean/ConfigBean.java",
"chars": 612,
"preview": "package com.springboot.bean;\n\nimport org.springframework.boot.context.properties.ConfigurationProperties;\n\n@Configuratio"
},
{
"path": "02.Spring-Boot-Config/src/main/java/com/springboot/bean/TestConfigBean.java",
"chars": 660,
"preview": "package com.springboot.bean;\n\nimport org.springframework.boot.context.properties.ConfigurationProperties;\nimport org.spr"
},
{
"path": "02.Spring-Boot-Config/src/main/java/com/springboot/controller/IndexController.java",
"chars": 658,
"preview": "package com.springboot.controller;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springfram"
},
{
"path": "02.Spring-Boot-Config/src/main/resources/application-dev.properties",
"chars": 16,
"preview": "server.port=8080"
},
{
"path": "02.Spring-Boot-Config/src/main/resources/application-prod.properties",
"chars": 16,
"preview": "server.port=8081"
},
{
"path": "02.Spring-Boot-Config/src/main/resources/application.properties",
"chars": 154,
"preview": "mrbird.blog.name=mrbird's blog\nmrbird.blog.title=Spring Boot\nmrbird.blog.wholeTitle=${mrbird.blog.name}--${mrbird.blog.t"
},
{
"path": "02.Spring-Boot-Config/src/main/resources/banner.txt",
"chars": 104,
"preview": " _ _ _ _ _ _ \n / \\ / \\ / \\ / \\ / \\ / \\ \n( m | r | b | i | r | d )\n \\_/ \\_/ \\_/ \\_/ \\_/ \\_/ \n"
},
{
"path": "02.Spring-Boot-Config/src/main/resources/test.properties",
"chars": 30,
"preview": "test.name=KangKang\ntest.age=25"
},
{
"path": "02.Spring-Boot-Config/src/test/java/com/springboot/demo/DemoApplicationTests.java",
"chars": 334,
"preview": "package com.springboot.demo;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.boot.te"
},
{
"path": "03.Spring-Boot-MyBatis/pom.xml",
"chars": 1989,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "03.Spring-Boot-MyBatis/src/main/java/com/springboot/Application.java",
"chars": 295,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "03.Spring-Boot-MyBatis/src/main/java/com/springboot/bean/Student.java",
"chars": 546,
"preview": "package com.springboot.bean;\n\nimport java.io.Serializable;\n\npublic class Student implements Serializable{\n\t\n\tprivate sta"
},
{
"path": "03.Spring-Boot-MyBatis/src/main/java/com/springboot/controller/TestController.java",
"chars": 649,
"preview": "package com.springboot.controller;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springfram"
},
{
"path": "03.Spring-Boot-MyBatis/src/main/java/com/springboot/mapper/StudentMapper.java",
"chars": 1149,
"preview": "package com.springboot.mapper;\n\nimport org.apache.ibatis.annotations.Delete;\nimport org.apache.ibatis.annotations.Insert"
},
{
"path": "03.Spring-Boot-MyBatis/src/main/java/com/springboot/service/StudentService.java",
"chars": 242,
"preview": "package com.springboot.service;\n\nimport com.springboot.bean.Student;\n\npublic interface StudentService {\n\tint add(Student"
},
{
"path": "03.Spring-Boot-MyBatis/src/main/java/com/springboot/service/impl/StudentServiceImp.java",
"chars": 819,
"preview": "package com.springboot.service.impl;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springfr"
},
{
"path": "03.Spring-Boot-MyBatis/src/main/resources/application.yml",
"chars": 1716,
"preview": "server:\n context-path: /web\n\nspring:\n datasource:\n druid:\n # 数据库访问配置, 使用druid数据源\n type: com.alibaba.druid"
},
{
"path": "03.Spring-Boot-MyBatis/src/main/resources/init.sql",
"chars": 285,
"preview": "CREATE TABLE STUDENT (\n SNO VARCHAR2(3 BYTE) NOT NULL ,\n SNAME VARCHAR2(9 BYTE) NOT NULL ,\n SSEX CHAR(2 BYTE) N"
},
{
"path": "04.Spring-Boot-JdbcTemplate/pom.xml",
"chars": 2049,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/Application.java",
"chars": 295,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/bean/Student.java",
"chars": 546,
"preview": "package com.springboot.bean;\n\nimport java.io.Serializable;\n\npublic class Student implements Serializable{\n\t\n\tprivate sta"
},
{
"path": "04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/controller/TestController.java",
"chars": 1298,
"preview": "package com.springboot.controller;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springframework.beans.facto"
},
{
"path": "04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/dao/StudentDao.java",
"chars": 333,
"preview": "package com.springboot.dao;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport com.springboot.bean.Student;\n\npublic i"
},
{
"path": "04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/dao/impl/StudentDaoImp.java",
"chars": 2361,
"preview": "package com.springboot.dao.impl;\n\nimport java.sql.Types;\nimport java.util.List;\nimport java.util.Map;\n\nimport org.spring"
},
{
"path": "04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/mapper/StudentMapper.java",
"chars": 496,
"preview": "package com.springboot.mapper;\n\nimport java.sql.ResultSet;\nimport java.sql.SQLException;\n\nimport org.springframework.jdb"
},
{
"path": "04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/service/StudentService.java",
"chars": 341,
"preview": "package com.springboot.service;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport com.springboot.bean.Student;\n\npubl"
},
{
"path": "04.Spring-Boot-JdbcTemplate/src/main/java/com/springboot/service/impl/StudentServiceImp.java",
"chars": 1008,
"preview": "package com.springboot.service.impl;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springframework.beans.fac"
},
{
"path": "04.Spring-Boot-JdbcTemplate/src/main/resources/application.yml",
"chars": 1716,
"preview": "server:\n context-path: /web\n\nspring:\n datasource:\n druid:\n # 数据库访问配置, 使用druid数据源\n type: com.alibaba.druid"
},
{
"path": "04.Spring-Boot-JdbcTemplate/src/main/resources/init.sql",
"chars": 285,
"preview": "CREATE TABLE STUDENT (\n SNO VARCHAR2(3 BYTE) NOT NULL ,\n SNAME VARCHAR2(9 BYTE) NOT NULL ,\n SSEX CHAR(2 BYTE) N"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/pom.xml",
"chars": 2084,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/Application.java",
"chars": 295,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/controller/StudentController.java",
"chars": 755,
"preview": "package com.springboot.controller;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springframework.beans.facto"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/datasource/MysqlDatasourceConfig.java",
"chars": 1986,
"preview": "package com.springboot.datasource;\n\nimport javax.sql.DataSource;\n\nimport org.apache.ibatis.session.SqlSessionFactory;\nim"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/datasource/OracleDatasourceConfig.java",
"chars": 1984,
"preview": "package com.springboot.datasource;\n\nimport javax.sql.DataSource;\n\nimport org.apache.ibatis.session.SqlSessionFactory;\nim"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/mysqldao/MysqlStudentMapper.java",
"chars": 218,
"preview": "package com.springboot.mysqldao;\n\nimport java.util.List;\nimport java.util.Map;\nimport org.apache.ibatis.annotations.Mapp"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/oracledao/OracleStudentMapper.java",
"chars": 220,
"preview": "package com.springboot.oracledao;\n\nimport java.util.List;\nimport java.util.Map;\nimport org.apache.ibatis.annotations.Map"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/service/StudentService.java",
"chars": 224,
"preview": "package com.springboot.service;\n\nimport java.util.List;\nimport java.util.Map;\n\npublic interface StudentService {\n\tList<M"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/java/com/springboot/service/impl/StudentServiceImp.java",
"chars": 815,
"preview": "package com.springboot.service.impl;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springframework.beans.fac"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/resources/application.yml",
"chars": 2148,
"preview": "server:\n context-path: /web\n\nspring:\n datasource:\n druid:\n # 数据库访问配置, 使用druid数据源\n # 数据源1 mysql\n mysq"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/resources/mapper/mysql/MysqlStudentMapper.xml",
"chars": 343,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?> \n <!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \n\"http://"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/resources/mapper/oracle/OracleStudentMapper.xml",
"chars": 345,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?> \n <!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \n\"http://"
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/resources/mysql_sql.sql",
"chars": 847,
"preview": "/*\nNavicat MySQL Data Transfer\n\nSource Server : localhost_3306\nSource Server Version : 50717\nSource Host "
},
{
"path": "05.Spring-Boot-MyBatis-MultiDataSource/src/main/resources/oracle_sql.sql",
"chars": 1216,
"preview": "/*\nNavicat Oracle Data Transfer\nOracle Client Version : 11.2.0.1.0\n\nSource Server : localhost_test\nSource Server"
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/pom.xml",
"chars": 2089,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/Application.java",
"chars": 295,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/controller/StudentController.java",
"chars": 755,
"preview": "package com.springboot.controller;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springframework.beans.facto"
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/dao/MysqlStudentDao.java",
"chars": 158,
"preview": "package com.springboot.dao;\n\nimport java.util.List;\nimport java.util.Map;\n\n\npublic interface MysqlStudentDao {\n\tList<Map"
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/dao/OracleStudentDao.java",
"chars": 158,
"preview": "package com.springboot.dao;\n\nimport java.util.List;\nimport java.util.Map;\n\npublic interface OracleStudentDao {\n\tList<Map"
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/dao/impl/MysqlStudentDaoImp.java",
"chars": 644,
"preview": "package com.springboot.dao.impl;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springframework.beans.factory"
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/dao/impl/OracleStudentDaoImp.java",
"chars": 647,
"preview": "package com.springboot.dao.impl;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springframework.beans.factory"
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/datasource/DataSourceConfig.java",
"chars": 1311,
"preview": "package com.springboot.datasource;\n\nimport javax.sql.DataSource;\n\nimport org.springframework.beans.factory.annotation.Qu"
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/service/StudentService.java",
"chars": 224,
"preview": "package com.springboot.service;\n\nimport java.util.List;\nimport java.util.Map;\n\npublic interface StudentService {\n\tList<M"
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/java/com/springboot/service/impl/StudentServiceImp.java",
"chars": 780,
"preview": "package com.springboot.service.impl;\n\nimport java.util.List;\nimport java.util.Map;\n\nimport org.springframework.beans.fac"
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/resources/application.yml",
"chars": 2147,
"preview": "server:\n context-path: /web\n\nspring:\n datasource:\n druid:\n # 数据库访问配置, 使用druid数据源\n # 数据源1 mysql\n mysq"
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/resources/mysql_sql.sql",
"chars": 847,
"preview": "/*\nNavicat MySQL Data Transfer\n\nSource Server : localhost_3306\nSource Server Version : 50717\nSource Host "
},
{
"path": "06.Spring-Boot-JdbcTemplate-MultiDataSource/src/main/resources/oracle_sql.sql",
"chars": 1216,
"preview": "/*\nNavicat Oracle Data Transfer\nOracle Client Version : 11.2.0.1.0\n\nSource Server : localhost_test\nSource Server"
},
{
"path": "07.Spring-Boot-AOP-Log/pom.xml",
"chars": 2075,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "07.Spring-Boot-AOP-Log/src/main/java/com/springboot/Application.java",
"chars": 295,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "07.Spring-Boot-AOP-Log/src/main/java/com/springboot/annotation/Log.java",
"chars": 316,
"preview": "package com.springboot.annotation;\n\nimport java.lang.annotation.ElementType;\nimport java.lang.annotation.Retention;\nimpo"
},
{
"path": "07.Spring-Boot-AOP-Log/src/main/java/com/springboot/aspect/LogAspect.java",
"chars": 2519,
"preview": "package com.springboot.aspect;\n\nimport java.lang.reflect.Method;\nimport java.util.Date;\n\nimport javax.servlet.http.HttpS"
},
{
"path": "07.Spring-Boot-AOP-Log/src/main/java/com/springboot/controller/TestController.java",
"chars": 541,
"preview": "package com.springboot.controller;\n\nimport org.springframework.web.bind.annotation.GetMapping;\nimport org.springframewor"
},
{
"path": "07.Spring-Boot-AOP-Log/src/main/java/com/springboot/dao/SysLogDao.java",
"chars": 131,
"preview": "package com.springboot.dao;\n\nimport com.springboot.domain.SysLog;\n\npublic interface SysLogDao {\n\tvoid saveSysLog(SysLog "
},
{
"path": "07.Spring-Boot-AOP-Log/src/main/java/com/springboot/dao/impl/SysLogDaoImp.java",
"chars": 1039,
"preview": "package com.springboot.dao.impl;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframew"
},
{
"path": "07.Spring-Boot-AOP-Log/src/main/java/com/springboot/domain/SysLog.java",
"chars": 1319,
"preview": "package com.springboot.domain;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\npublic class SysLog implements Seri"
},
{
"path": "07.Spring-Boot-AOP-Log/src/main/java/com/springboot/util/HttpContextUtils.java",
"chars": 413,
"preview": "package com.springboot.util;\n\nimport javax.servlet.http.HttpServletRequest;\n\nimport org.springframework.web.context.requ"
},
{
"path": "07.Spring-Boot-AOP-Log/src/main/java/com/springboot/util/IPUtils.java",
"chars": 818,
"preview": "package com.springboot.util;\n\nimport javax.servlet.http.HttpServletRequest;\n\npublic class IPUtils {\n\n\t/**\n\t * 获取IP地址\n\t *"
},
{
"path": "07.Spring-Boot-AOP-Log/src/main/resources/application.yml",
"chars": 1723,
"preview": "server:\n context-path: /web\n\nspring:\n datasource:\n druid:\n # 数据库访问配置, 使用druid数据源 \n type: com.alibaba.drui"
},
{
"path": "07.Spring-Boot-AOP-Log/src/main/resources/init.sql",
"chars": 651,
"preview": "CREATE TABLE SYS_LOG (\n ID NUMBER(20) NOT NULL ,\n USERNAME VARCHAR2(50 BYTE) NULL ,\n OPERATION VARCHAR2(50 BYTE) N"
},
{
"path": "08.Spring-Boot-Thymeleaf/pom.xml",
"chars": 1720,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "08.Spring-Boot-Thymeleaf/src/main/java/com/springboot/Application.java",
"chars": 295,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "08.Spring-Boot-Thymeleaf/src/main/java/com/springboot/bean/Account.java",
"chars": 1016,
"preview": "package com.springboot.bean;\n\npublic class Account {\n\tprivate String account;\n\tprivate String name;\n\tprivate String pass"
},
{
"path": "08.Spring-Boot-Thymeleaf/src/main/java/com/springboot/controller/IndexController.java",
"chars": 855,
"preview": "package com.springboot.controller;\n\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport org.springframework.stere"
},
{
"path": "08.Spring-Boot-Thymeleaf/src/main/resources/application.properties",
"chars": 54,
"preview": "server.context-path=/web\n\nspring.thymeleaf.cache=false"
},
{
"path": "08.Spring-Boot-Thymeleaf/src/main/resources/static/css/style.css",
"chars": 498,
"preview": "table {\n\tmargin: 20px 40px 20px 0px;\n\twidth: 100%;\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n\ttable-layout: automa"
},
{
"path": "08.Spring-Boot-Thymeleaf/src/main/resources/templates/account.html",
"chars": 716,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n <title>account</title>\n <meta http-equiv=\"Conte"
},
{
"path": "09.Spring-Boot-Redis-Cache/pom.xml",
"chars": 2312,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/Application.java",
"chars": 369,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/ApplicationTest.java",
"chars": 1336,
"preview": "package com.springboot;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factor"
},
{
"path": "09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/bean/Student.java",
"chars": 546,
"preview": "package com.springboot.bean;\n\nimport java.io.Serializable;\n\npublic class Student implements Serializable{\n\t\n\tprivate sta"
},
{
"path": "09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/config/RedisConfig.java",
"chars": 2361,
"preview": "package com.springboot.config;\n\nimport org.springframework.cache.CacheManager;\nimport org.springframework.cache.annotati"
},
{
"path": "09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/mapper/StudentMapper.java",
"chars": 1015,
"preview": "package com.springboot.mapper;\n\nimport org.apache.ibatis.annotations.Delete;\nimport org.apache.ibatis.annotations.Mapper"
},
{
"path": "09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/service/StudentService.java",
"chars": 579,
"preview": "package com.springboot.service;\n\nimport org.springframework.cache.annotation.CacheConfig;\nimport org.springframework.cac"
},
{
"path": "09.Spring-Boot-Redis-Cache/src/main/java/com/springboot/service/impl/StudentServiceImpl.java",
"chars": 805,
"preview": "package com.springboot.service.impl;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springfr"
},
{
"path": "09.Spring-Boot-Redis-Cache/src/main/resources/application.yml",
"chars": 2147,
"preview": "server:\n context-path: /web\n\nspring:\n datasource:\n druid:\n # 数据库访问配置, 使用druid数据源\n type: com.alibaba.druid"
},
{
"path": "09.Spring-Boot-Redis-Cache/src/main/resources/init.sql",
"chars": 285,
"preview": "CREATE TABLE STUDENT (\n SNO VARCHAR2(3 BYTE) NOT NULL ,\n SNAME VARCHAR2(9 BYTE) NOT NULL ,\n SSEX CHAR(2 BYTE) N"
},
{
"path": "10.Spring-Boot-Ehcache-Cache/pom.xml",
"chars": 2271,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/Application.java",
"chars": 369,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/ApplicationTest.java",
"chars": 1388,
"preview": "package com.springboot;\n\nimport org.junit.Test;\nimport org.junit.runner.RunWith;\nimport org.springframework.beans.factor"
},
{
"path": "10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/bean/Student.java",
"chars": 546,
"preview": "package com.springboot.bean;\n\nimport java.io.Serializable;\n\npublic class Student implements Serializable{\n\t\n\tprivate sta"
},
{
"path": "10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/mapper/StudentMapper.java",
"chars": 921,
"preview": "package com.springboot.mapper;\n\nimport org.apache.ibatis.annotations.Delete;\nimport org.apache.ibatis.annotations.Mapper"
},
{
"path": "10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/service/StudentService.java",
"chars": 579,
"preview": "package com.springboot.service;\n\nimport org.springframework.cache.annotation.CacheConfig;\nimport org.springframework.cac"
},
{
"path": "10.Spring-Boot-Ehcache-Cache/src/main/java/com/springboot/service/impl/StudentServiceImpl.java",
"chars": 805,
"preview": "package com.springboot.service.impl;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springfr"
},
{
"path": "10.Spring-Boot-Ehcache-Cache/src/main/resources/application.yml",
"chars": 1859,
"preview": "server:\n context-path: /web\n\nspring:\n datasource:\n druid:\n # 数据库访问配置, 使用druid数据源\n type: com.alibaba.druid"
},
{
"path": "10.Spring-Boot-Ehcache-Cache/src/main/resources/ehcache.xml",
"chars": 642,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ehcache xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:noNam"
},
{
"path": "10.Spring-Boot-Ehcache-Cache/src/main/resources/init.sql",
"chars": 285,
"preview": "CREATE TABLE STUDENT (\n SNO VARCHAR2(3 BYTE) NOT NULL ,\n SNAME VARCHAR2(9 BYTE) NOT NULL ,\n SSEX CHAR(2 BYTE) N"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/pom.xml",
"chars": 2248,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/Application.java",
"chars": 295,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/config/ShiroConfig.java",
"chars": 1802,
"preview": "package com.springboot.config;\n\nimport java.util.LinkedHashMap;\n\nimport org.apache.shiro.mgt.SecurityManager;\nimport org"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/controller/LoginController.java",
"chars": 1902,
"preview": "package com.springboot.controller;\n\nimport org.apache.shiro.SecurityUtils;\nimport org.apache.shiro.authc.AuthenticationE"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/dao/UserMapper.java",
"chars": 188,
"preview": "package com.springboot.dao;\n\nimport org.apache.ibatis.annotations.Mapper;\n\nimport com.springboot.pojo.User;\n\n@Mapper\npub"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/pojo/ResponseBo.java",
"chars": 1048,
"preview": "package com.springboot.pojo;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class ResponseBo extends HashMap<S"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/pojo/User.java",
"chars": 930,
"preview": "package com.springboot.pojo;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\npublic class User implements Serializ"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/shiro/ShiroRealm.java",
"chars": 1726,
"preview": "package com.springboot.shiro;\n\nimport org.apache.shiro.authc.AuthenticationException;\nimport org.apache.shiro.authc.Auth"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/java/com/springboot/util/MD5Utils.java",
"chars": 802,
"preview": "package com.springboot.util;\n\nimport org.apache.shiro.crypto.hash.SimpleHash;\nimport org.apache.shiro.util.ByteSource;\n\n"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/resources/application.yml",
"chars": 1916,
"preview": "server:\n context-path: /web\n\nspring:\n datasource:\n druid:\n # 数据库访问配置, 使用druid数据源 \n type: com.alibaba.drui"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/resources/init.sql",
"chars": 982,
"preview": "-- ----------------------------\n-- Table structure for T_USER\n-- ----------------------------\nCREATE TABLE T_USER (\n I"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/resources/mapper/UserMapper.xml",
"chars": 837,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/resources/static/css/login.css",
"chars": 1885,
"preview": ".login-page {\n width: 360px;\n padding: 8% 0 0;\n margin: auto;\n}\n.form {\n position: relative;\n z-index: 1;\n backgro"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/resources/templates/index.html",
"chars": 203,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>首页</title>\n</head>\n<bo"
},
{
"path": "11.Spring-Boot-Shiro-Authentication/src/main/resources/templates/login.html",
"chars": 1123,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>登录</title>\n\t<link rel="
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/pom.xml",
"chars": 2244,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/Application.java",
"chars": 295,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/config/ShiroConfig.java",
"chars": 2909,
"preview": "package com.springboot.config;\n\nimport java.util.LinkedHashMap;\n\nimport org.apache.shiro.codec.Base64;\nimport org.apache"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/controller/LoginController.java",
"chars": 1934,
"preview": "package com.springboot.controller;\n\nimport org.apache.shiro.SecurityUtils;\nimport org.apache.shiro.authc.AuthenticationE"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/dao/UserMapper.java",
"chars": 188,
"preview": "package com.springboot.dao;\n\nimport org.apache.ibatis.annotations.Mapper;\n\nimport com.springboot.pojo.User;\n\n@Mapper\npub"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/pojo/ResponseBo.java",
"chars": 1048,
"preview": "package com.springboot.pojo;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class ResponseBo extends HashMap<S"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/pojo/User.java",
"chars": 930,
"preview": "package com.springboot.pojo;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\npublic class User implements Serializ"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/shiro/ShiroRealm.java",
"chars": 1726,
"preview": "package com.springboot.shiro;\n\nimport org.apache.shiro.authc.AuthenticationException;\nimport org.apache.shiro.authc.Auth"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/java/com/springboot/util/MD5Utils.java",
"chars": 802,
"preview": "package com.springboot.util;\n\nimport org.apache.shiro.crypto.hash.SimpleHash;\nimport org.apache.shiro.util.ByteSource;\n\n"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/resources/application.yml",
"chars": 1916,
"preview": "server:\n context-path: /web\n\nspring:\n datasource:\n druid:\n # 数据库访问配置, 使用druid数据源 \n type: com.alibaba.drui"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/resources/init.sql",
"chars": 982,
"preview": "-- ----------------------------\n-- Table structure for T_USER\n-- ----------------------------\nCREATE TABLE T_USER (\n I"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/resources/mapper/UserMapper.xml",
"chars": 837,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/resources/static/css/login.css",
"chars": 2001,
"preview": ".login-page {\n width: 360px;\n padding: 8% 0 0;\n margin: auto;\n}\n.form {\n position: relative;\n z-index: 1;\n backgro"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/resources/templates/index.html",
"chars": 203,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>首页</title>\n</head>\n<bo"
},
{
"path": "12.Spring-Boot-Shiro-RememberMe/src/main/resources/templates/login.html",
"chars": 1276,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>登录</title>\n\t<link rel="
},
{
"path": "13.Spring-Boot-Shiro-Authorization/pom.xml",
"chars": 2247,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/Application.java",
"chars": 295,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/config/ShiroConfig.java",
"chars": 3011,
"preview": "package com.springboot.config;\n\nimport java.util.LinkedHashMap;\n\nimport org.apache.shiro.codec.Base64;\nimport org.apache"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/controller/LoginController.java",
"chars": 2002,
"preview": "package com.springboot.controller;\n\nimport org.apache.shiro.SecurityUtils;\nimport org.apache.shiro.authc.AuthenticationE"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/controller/UserController.java",
"chars": 805,
"preview": "package com.springboot.controller;\n\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\nimport org.springframe"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/dao/UserMapper.java",
"chars": 188,
"preview": "package com.springboot.dao;\n\nimport org.apache.ibatis.annotations.Mapper;\n\nimport com.springboot.pojo.User;\n\n@Mapper\npub"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/dao/UserPermissionMapper.java",
"chars": 240,
"preview": "package com.springboot.dao;\n\nimport java.util.List;\nimport org.apache.ibatis.annotations.Mapper;\nimport com.springboot.p"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/dao/UserRoleMapper.java",
"chars": 223,
"preview": "package com.springboot.dao;\n\nimport java.util.List;\n\nimport org.apache.ibatis.annotations.Mapper;\nimport com.springboot."
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/handler/GlobalExceptionHandler.java",
"chars": 537,
"preview": "package com.springboot.handler;\n\nimport org.apache.shiro.authz.AuthorizationException;\nimport org.springframework.core.O"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/pojo/Permission.java",
"chars": 544,
"preview": "package com.springboot.pojo;\n\nimport java.io.Serializable;\n\npublic class Permission implements Serializable{\n\n\tprivate s"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/pojo/ResponseBo.java",
"chars": 1048,
"preview": "package com.springboot.pojo;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class ResponseBo extends HashMap<S"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/pojo/Role.java",
"chars": 548,
"preview": "package com.springboot.pojo;\n\nimport java.io.Serializable;\n\npublic class Role implements Serializable{\n\t\n\tprivate static"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/pojo/User.java",
"chars": 930,
"preview": "package com.springboot.pojo;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\npublic class User implements Serializ"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/shiro/ShiroRealm.java",
"chars": 2987,
"preview": "package com.springboot.shiro;\n\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Set;\n\nimport org.apache"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/java/com/springboot/util/MD5Utils.java",
"chars": 804,
"preview": "package com.springboot.util;\n\nimport org.apache.shiro.crypto.hash.SimpleHash;\nimport org.apache.shiro.util.ByteSource;\n\n"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/resources/application.yml",
"chars": 1916,
"preview": "server:\n context-path: /web\n\nspring:\n datasource:\n druid:\n # 数据库访问配置, 使用druid数据源 \n type: com.alibaba.drui"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/resources/init.sql",
"chars": 2953,
"preview": "-- ----------------------------\n-- Table structure for T_PERMISSION\n-- ----------------------------\nCREATE TABLE T_PERMI"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/resources/mapper/UserMapper.xml",
"chars": 837,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/resources/mapper/UserPermissionMapper.xml",
"chars": 869,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/resources/mapper/UserRoleMapper.xml",
"chars": 751,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/resources/static/css/login.css",
"chars": 2001,
"preview": ".login-page {\n width: 360px;\n padding: 8% 0 0;\n margin: auto;\n}\n.form {\n position: relative;\n z-index: 1;\n backgro"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/resources/templates/403.html",
"chars": 193,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>暂无权限</title>\n</head>\n<"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/resources/templates/index.html",
"chars": 453,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>首页</title>\n</head>\n<st"
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/resources/templates/login.html",
"chars": 1276,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>登录</title>\n\t<link rel="
},
{
"path": "13.Spring-Boot-Shiro-Authorization/src/main/resources/templates/user.html",
"chars": 201,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>[[${value}]]</title>\n<"
},
{
"path": "14.Spring-Boot-Shiro-Redis/pom.xml",
"chars": 2416,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/Application.java",
"chars": 295,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/config/ShiroConfig.java",
"chars": 4111,
"preview": "package com.springboot.config;\n\nimport java.util.LinkedHashMap;\n\nimport org.apache.shiro.codec.Base64;\nimport org.apache"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/controller/LoginController.java",
"chars": 2002,
"preview": "package com.springboot.controller;\n\nimport org.apache.shiro.SecurityUtils;\nimport org.apache.shiro.authc.AuthenticationE"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/controller/UserController.java",
"chars": 805,
"preview": "package com.springboot.controller;\n\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\nimport org.springframe"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/dao/UserMapper.java",
"chars": 188,
"preview": "package com.springboot.dao;\n\nimport org.apache.ibatis.annotations.Mapper;\n\nimport com.springboot.pojo.User;\n\n@Mapper\npub"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/dao/UserPermissionMapper.java",
"chars": 240,
"preview": "package com.springboot.dao;\n\nimport java.util.List;\nimport org.apache.ibatis.annotations.Mapper;\nimport com.springboot.p"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/dao/UserRoleMapper.java",
"chars": 223,
"preview": "package com.springboot.dao;\n\nimport java.util.List;\n\nimport org.apache.ibatis.annotations.Mapper;\nimport com.springboot."
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/handler/GlobalExceptionHandler.java",
"chars": 537,
"preview": "package com.springboot.handler;\n\nimport org.apache.shiro.authz.AuthorizationException;\nimport org.springframework.core.O"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/pojo/Permission.java",
"chars": 544,
"preview": "package com.springboot.pojo;\n\nimport java.io.Serializable;\n\npublic class Permission implements Serializable{\n\n\tprivate s"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/pojo/ResponseBo.java",
"chars": 1048,
"preview": "package com.springboot.pojo;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class ResponseBo extends HashMap<S"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/pojo/Role.java",
"chars": 548,
"preview": "package com.springboot.pojo;\n\nimport java.io.Serializable;\n\npublic class Role implements Serializable{\n\t\n\tprivate static"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/pojo/User.java",
"chars": 930,
"preview": "package com.springboot.pojo;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\npublic class User implements Serializ"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/shiro/ShiroRealm.java",
"chars": 2987,
"preview": "package com.springboot.shiro;\n\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Set;\n\nimport org.apache"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/java/com/springboot/util/MD5Utils.java",
"chars": 804,
"preview": "package com.springboot.util;\n\nimport org.apache.shiro.crypto.hash.SimpleHash;\nimport org.apache.shiro.util.ByteSource;\n\n"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/resources/application.yml",
"chars": 2061,
"preview": "server:\n context-path: /web\n\nspring:\n datasource:\n druid:\n # 数据库访问配置, 使用druid数据源 \n type: com.alibaba.drui"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/resources/init.sql",
"chars": 2953,
"preview": "-- ----------------------------\n-- Table structure for T_PERMISSION\n-- ----------------------------\nCREATE TABLE T_PERMI"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/resources/mapper/UserMapper.xml",
"chars": 837,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/resources/mapper/UserPermissionMapper.xml",
"chars": 869,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/resources/mapper/UserRoleMapper.xml",
"chars": 751,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/resources/static/css/login.css",
"chars": 2001,
"preview": ".login-page {\n width: 360px;\n padding: 8% 0 0;\n margin: auto;\n}\n.form {\n position: relative;\n z-index: 1;\n backgro"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/resources/templates/403.html",
"chars": 193,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>暂无权限</title>\n</head>\n<"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/resources/templates/index.html",
"chars": 453,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>首页</title>\n</head>\n<st"
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/resources/templates/login.html",
"chars": 1276,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>登录</title>\n\t<link rel="
},
{
"path": "14.Spring-Boot-Shiro-Redis/src/main/resources/templates/user.html",
"chars": 201,
"preview": "<!DOCTYPE html>\n<html xmlns:th=\"http://www.thymeleaf.org\">\n<head>\n\t<meta charset=\"UTF-8\">\n\t<title>[[${value}]]</title>\n<"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/pom.xml",
"chars": 2767,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/Application.java",
"chars": 295,
"preview": "package com.springboot;\n\nimport org.springframework.boot.SpringApplication;\nimport org.springframework.boot.autoconfigur"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/config/ShiroConfig.java",
"chars": 3954,
"preview": "package com.springboot.config;\n\nimport java.util.LinkedHashMap;\n\nimport org.apache.shiro.cache.ehcache.EhCacheManager;\ni"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/controller/LoginController.java",
"chars": 2002,
"preview": "package com.springboot.controller;\n\nimport org.apache.shiro.SecurityUtils;\nimport org.apache.shiro.authc.AuthenticationE"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/controller/UserController.java",
"chars": 805,
"preview": "package com.springboot.controller;\n\nimport org.apache.shiro.authz.annotation.RequiresPermissions;\nimport org.springframe"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/dao/UserMapper.java",
"chars": 188,
"preview": "package com.springboot.dao;\n\nimport org.apache.ibatis.annotations.Mapper;\n\nimport com.springboot.pojo.User;\n\n@Mapper\npub"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/dao/UserPermissionMapper.java",
"chars": 240,
"preview": "package com.springboot.dao;\n\nimport java.util.List;\nimport org.apache.ibatis.annotations.Mapper;\nimport com.springboot.p"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/dao/UserRoleMapper.java",
"chars": 223,
"preview": "package com.springboot.dao;\n\nimport java.util.List;\n\nimport org.apache.ibatis.annotations.Mapper;\nimport com.springboot."
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/handler/GlobalExceptionHandler.java",
"chars": 537,
"preview": "package com.springboot.handler;\n\nimport org.apache.shiro.authz.AuthorizationException;\nimport org.springframework.core.O"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/pojo/Permission.java",
"chars": 544,
"preview": "package com.springboot.pojo;\n\nimport java.io.Serializable;\n\npublic class Permission implements Serializable{\n\n\tprivate s"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/pojo/ResponseBo.java",
"chars": 1048,
"preview": "package com.springboot.pojo;\n\nimport java.util.HashMap;\nimport java.util.Map;\n\npublic class ResponseBo extends HashMap<S"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/pojo/Role.java",
"chars": 548,
"preview": "package com.springboot.pojo;\n\nimport java.io.Serializable;\n\npublic class Role implements Serializable{\n\t\n\tprivate static"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/pojo/User.java",
"chars": 930,
"preview": "package com.springboot.pojo;\n\nimport java.io.Serializable;\nimport java.util.Date;\n\npublic class User implements Serializ"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/shiro/ShiroRealm.java",
"chars": 2987,
"preview": "package com.springboot.shiro;\n\nimport java.util.HashSet;\nimport java.util.List;\nimport java.util.Set;\n\nimport org.apache"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/java/com/springboot/util/MD5Utils.java",
"chars": 804,
"preview": "package com.springboot.util;\n\nimport org.apache.shiro.crypto.hash.SimpleHash;\nimport org.apache.shiro.util.ByteSource;\n\n"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/resources/application.yml",
"chars": 1916,
"preview": "server:\n context-path: /web\n\nspring:\n datasource:\n druid:\n # 数据库访问配置, 使用druid数据源 \n type: com.alibaba.drui"
},
{
"path": "15.Spring-Boot-Shiro-Ehcache/src/main/resources/config/shiro-ehcache.xml",
"chars": 747,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<ehcache xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n\txsi:noNamespaceSc"
}
]
// ... and 850 more files (download for full content)
About this extraction
This page contains the full source code of the wuyouzhuguli/SpringAll GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1050 files (1.1 MB), approximately 322.4k tokens, and a symbol index with 2687 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.