Full Code of wuyouzhuguli/SpringAll for AI

master 614d2578d949 cached
1050 files
1.1 MB
322.4k tokens
2687 symbols
1 requests
Download .txt
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.
Download .txt
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
Download .txt
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.

Copied to clipboard!