diff --git a/.gitignore b/.gitignore
index 697ec7db011f3e4e7a0be323c58f7d673111b61c..3e9140ca613c38df9820a5fe15c1594faeeb0db4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
-
/.idea/
/clouddo.iml
/clouddo-*/clouddo-*.iml
diff --git a/clouddo-admin/clouddo.sql b/clouddo-admin/clouddo.sql
index 6d3daf9be8cf965d1aefaed1359b870b1342f819..364ad075c2a91d6505d6320c2f3cfce31f82a542 100644
--- a/clouddo-admin/clouddo.sql
+++ b/clouddo-admin/clouddo.sql
@@ -2,19 +2,42 @@
Navicat MySQL Data Transfer
Source Server : localhost
-Source Server Version : 50721
+Source Server Version : 50725
Source Host : localhost:3306
Source Database : clouddo
Target Server Type : MYSQL
-Target Server Version : 50721
+Target Server Version : 50725
File Encoding : 65001
-Date: 2018-05-25 15:34:34
+Date: 2019-04-02 16:42:17
*/
SET FOREIGN_KEY_CHECKS=0;
+-- ----------------------------
+-- Table structure for `clientdetails`
+-- ----------------------------
+DROP TABLE IF EXISTS `clientdetails`;
+CREATE TABLE `clientdetails` (
+ `appId` varchar(128) NOT NULL,
+ `resourceIds` varchar(256) DEFAULT NULL,
+ `appSecret` varchar(256) DEFAULT NULL,
+ `scope` varchar(256) DEFAULT NULL,
+ `grantTypes` varchar(256) DEFAULT NULL,
+ `redirectUrl` varchar(256) DEFAULT NULL,
+ `authorities` varchar(256) DEFAULT NULL,
+ `access_token_validity` int(11) DEFAULT NULL,
+ `refresh_token_validity` int(11) DEFAULT NULL,
+ `additionalInformation` varchar(4096) DEFAULT NULL,
+ `autoApproveScopes` varchar(256) DEFAULT NULL,
+ PRIMARY KEY (`appId`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of clientdetails
+-- ----------------------------
+
-- ----------------------------
-- Table structure for `cms_file`
-- ----------------------------
@@ -34,6 +57,112 @@ INSERT INTO `cms_file` VALUES ('144', '1', 'http://localhost:8004/files/11/20/9f
INSERT INTO `cms_file` VALUES ('145', '1', 'http://localhost:8004/files/45/44/26f1385f-c227-482a-84ad-4d97ee25ef0d', '2018-05-25 15:20:29');
INSERT INTO `cms_file` VALUES ('146', '1', 'http://localhost:8004/files/99/45/c8ea7174-1ebb-4c7c-864d-8a1defa57ff8', '2018-05-25 15:21:16');
+-- ----------------------------
+-- Table structure for `oauth_access_token`
+-- ----------------------------
+DROP TABLE IF EXISTS `oauth_access_token`;
+CREATE TABLE `oauth_access_token` (
+ `token_id` varchar(256) DEFAULT NULL,
+ `token` blob,
+ `authentication_id` varchar(128) NOT NULL,
+ `user_name` varchar(256) DEFAULT NULL,
+ `client_id` varchar(256) DEFAULT NULL,
+ `authentication` blob,
+ `refresh_token` varchar(256) DEFAULT NULL,
+ PRIMARY KEY (`authentication_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of oauth_access_token
+-- ----------------------------
+INSERT INTO `oauth_access_token` VALUES ('a6ec018d6789c01d00c838bc95467c2d', 0xACED0005737200436F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F4175746832416363657373546F6B656E0CB29E361B24FACE0200064C00156164646974696F6E616C496E666F726D6174696F6E74000F4C6A6176612F7574696C2F4D61703B4C000A65787069726174696F6E7400104C6A6176612F7574696C2F446174653B4C000C72656672657368546F6B656E74003F4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F636F6D6D6F6E2F4F417574683252656672657368546F6B656E3B4C000573636F706574000F4C6A6176612F7574696C2F5365743B4C0009746F6B656E547970657400124C6A6176612F6C616E672F537472696E673B4C000576616C756571007E000578707372001E6A6176612E7574696C2E436F6C6C656374696F6E7324456D7074794D6170593614855ADCE7D002000078707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000169DE9313F2787372004C6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744578706972696E674F417574683252656672657368546F6B656E2FDF47639DD0C9B70200014C000A65787069726174696F6E71007E0002787200446F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F417574683252656672657368546F6B656E73E10E0A6354D45E0200014C000576616C756571007E0005787074002433343937313131382D343864392D346365332D613136342D6232666433356334646666357371007E000977080000016A767EADEF78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C0001637400164C6A6176612F7574696C2F436F6C6C656374696F6E3B7870737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000023F400000000000017400036170707874000662656172657274002463386533386634372D646662302D346163392D383030322D643438303564366139353062, 'b9cdd625a781099755dfb47c3de1e150', 'admin', 'app', 0xACED0005737200416F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F417574683241757468656E7469636174696F6EBD400B02166252130200024C000D73746F7265645265717565737474003C4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F4F4175746832526571756573743B4C00127573657241757468656E7469636174696F6E7400324C6F72672F737072696E676672616D65776F726B2F73656375726974792F636F72652F41757468656E7469636174696F6E3B787200476F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E416273747261637441757468656E7469636174696F6E546F6B656ED3AA287E6E47640E0200035A000D61757468656E746963617465644C000B617574686F7269746965737400164C6A6176612F7574696C2F436F6C6C656374696F6E3B4C000764657461696C737400124C6A6176612F6C616E672F4F626A6563743B787000737200266A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654C697374FC0F2531B5EC8E100200014C00046C6973747400104C6A6176612F7574696C2F4C6973743B7872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C00016371007E00047870737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000014770400000014737200426F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E617574686F726974792E53696D706C654772616E746564417574686F7269747900000000000001F40200014C0004726F6C657400124C6A6176612F6C616E672F537472696E673B787074000E61646D696E3A6D656E753A6164647371007E000D74001661646D696E3A6D656E753A626174636852656D6F76657371007E000D74000F61646D696E3A6D656E753A656469747371007E000D74000F61646D696E3A6D656E753A6C6973747371007E000D74000F61646D696E3A6D656E753A6D656E757371007E000D74001161646D696E3A6D656E753A72656D6F76657371007E000D74000E61646D696E3A726F6C653A6164647371007E000D74001661646D696E3A726F6C653A626174636852656D6F76657371007E000D74000F61646D696E3A726F6C653A656469747371007E000D74001161646D696E3A726F6C653A72656D6F76657371007E000D74000F61646D696E3A726F6C653A726F6C657371007E000D74000E61646D696E3A757365723A6164647371007E000D74001661646D696E3A757365723A626174636852656D6F76657371007E000D74001261646D696E3A757365723A64697361626C657371007E000D74000F61646D696E3A757365723A656469747371007E000D74001161646D696E3A757365723A72656D6F76657371007E000D74001361646D696E3A757365723A72657365745077647371007E000D74000F61646D696E3A757365723A757365727371007E000D74000B636D733A636F6E74656E747371007E000D740008636D733A66696C657871007E000C707372003A6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F41757468325265717565737400000000000000010200075A0008617070726F7665644C000B617574686F72697469657371007E00044C000A657874656E73696F6E7374000F4C6A6176612F7574696C2F4D61703B4C000B726564697265637455726971007E000E4C00077265667265736874003B4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F546F6B656E526571756573743B4C000B7265736F7572636549647374000F4C6A6176612F7574696C2F5365743B4C000D726573706F6E7365547970657371007E003A787200386F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E426173655265717565737436287A3EA37169BD0200034C0008636C69656E74496471007E000E4C001172657175657374506172616D657465727371007E00384C000573636F706571007E003A7870740003617070737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654D6170F1A5A8FE74F507420200014C00016D71007E00387870737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F400000000000067708000000080000000374000A6772616E745F7479706574000870617373776F7264740009636C69656E745F6964740003617070740008757365726E616D6574000561646D696E78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007871007E0009737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000103F4000000000000171007E003D78017371007E004B770C000000103F40000000000000787371007E00403F40000000000000770800000010000000007870707371007E004B770C000000103F40000000000000787371007E004B770C000000103F40000000000000787372004F6F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E557365726E616D6550617373776F726441757468656E7469636174696F6E546F6B656E00000000000001F40200024C000B63726564656E7469616C7371007E00054C00097072696E636970616C71007E00057871007E0003017371007E00077371007E000B0000001477040000001471007E000F71007E001171007E001371007E001571007E001771007E001971007E001B71007E001D71007E001F71007E002171007E002371007E002571007E002771007E002971007E002B71007E002D71007E002F71007E003171007E003371007E00357871007E0054737200176A6176612E7574696C2E4C696E6B6564486173684D617034C04E5C106CC0FB0200015A000B6163636573734F726465727871007E00403F400000000000067708000000080000000474000D636C69656E745F73656372657474000631323334353671007E004271007E004371007E004471007E004571007E004671007E00477800707372002B636F6D2E626F6F74646F2E636C6F7564646F61646D696E2E736563756974792E43757272656E7455736572FA08FA21BD5406A90200024C000269647400104C6A6176612F6C616E672F4C6F6E673B4C00046E616D6571007E000E787200326F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E7573657264657461696C732E5573657200000000000001F40200075A00116163636F756E744E6F6E457870697265645A00106163636F756E744E6F6E4C6F636B65645A001563726564656E7469616C734E6F6E457870697265645A0007656E61626C65644C000B617574686F72697469657371007E003A4C000870617373776F726471007E000E4C0008757365726E616D6571007E000E7870010101017371007E0048737200116A6176612E7574696C2E54726565536574DD98509395ED875B0300007870737200466F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E7573657264657461696C732E5573657224417574686F72697479436F6D70617261746F7200000000000001F4020000787077040000001471007E000F71007E001171007E001371007E001571007E001771007E001971007E001B71007E001D71007E001F71007E002171007E002371007E002571007E002771007E002971007E002B71007E002D71007E002F71007E003171007E003371007E0035787071007E00477372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000000000000174000FE8B685E7BAA7E7AEA1E79086E59198, 'f91f06fa89955f6805a646c74fe24639');
+
+-- ----------------------------
+-- Table structure for `oauth_approvals`
+-- ----------------------------
+DROP TABLE IF EXISTS `oauth_approvals`;
+CREATE TABLE `oauth_approvals` (
+ `userId` varchar(256) DEFAULT NULL,
+ `clientId` varchar(256) DEFAULT NULL,
+ `scope` varchar(256) DEFAULT NULL,
+ `status` varchar(10) DEFAULT NULL,
+ `expiresAt` datetime DEFAULT NULL,
+ `lastModifiedAt` datetime DEFAULT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of oauth_approvals
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for `oauth_client_details`
+-- ----------------------------
+DROP TABLE IF EXISTS `oauth_client_details`;
+CREATE TABLE `oauth_client_details` (
+ `client_id` varchar(128) NOT NULL,
+ `resource_ids` varchar(256) DEFAULT NULL,
+ `client_secret` varchar(256) DEFAULT NULL,
+ `scope` varchar(256) DEFAULT NULL,
+ `authorized_grant_types` varchar(256) DEFAULT NULL,
+ `web_server_redirect_uri` varchar(256) DEFAULT NULL,
+ `authorities` varchar(256) DEFAULT NULL,
+ `access_token_validity` int(11) DEFAULT NULL,
+ `refresh_token_validity` int(11) DEFAULT NULL,
+ `additional_information` varchar(4096) DEFAULT NULL,
+ `autoapprove` varchar(256) DEFAULT NULL,
+ PRIMARY KEY (`client_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of oauth_client_details
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for `oauth_client_token`
+-- ----------------------------
+DROP TABLE IF EXISTS `oauth_client_token`;
+CREATE TABLE `oauth_client_token` (
+ `token_id` varchar(256) DEFAULT NULL,
+ `token` blob,
+ `authentication_id` varchar(128) NOT NULL,
+ `user_name` varchar(256) DEFAULT NULL,
+ `client_id` varchar(256) DEFAULT NULL,
+ PRIMARY KEY (`authentication_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of oauth_client_token
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for `oauth_code`
+-- ----------------------------
+DROP TABLE IF EXISTS `oauth_code`;
+CREATE TABLE `oauth_code` (
+ `code` varchar(256) DEFAULT NULL,
+ `authentication` blob
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of oauth_code
+-- ----------------------------
+
+-- ----------------------------
+-- Table structure for `oauth_refresh_token`
+-- ----------------------------
+DROP TABLE IF EXISTS `oauth_refresh_token`;
+CREATE TABLE `oauth_refresh_token` (
+ `token_id` varchar(256) DEFAULT NULL,
+ `token` blob,
+ `authentication` blob
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
+-- ----------------------------
+-- Records of oauth_refresh_token
+-- ----------------------------
+INSERT INTO `oauth_refresh_token` VALUES ('47023366984f5c1fce7e9453bc0c7113', 0xACED00057372004C6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744578706972696E674F417574683252656672657368546F6B656E2FDF47639DD0C9B70200014C000A65787069726174696F6E7400104C6A6176612F7574696C2F446174653B787200446F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F417574683252656672657368546F6B656E73E10E0A6354D45E0200014C000576616C75657400124C6A6176612F6C616E672F537472696E673B787074002465616562333335342D633833302D346331662D623132632D6262613264643337366230617372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000016A58A3EA1878, 0xACED0005737200416F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F417574683241757468656E7469636174696F6EBD400B02166252130200024C000D73746F7265645265717565737474003C4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F4F4175746832526571756573743B4C00127573657241757468656E7469636174696F6E7400324C6F72672F737072696E676672616D65776F726B2F73656375726974792F636F72652F41757468656E7469636174696F6E3B787200476F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E416273747261637441757468656E7469636174696F6E546F6B656ED3AA287E6E47640E0200035A000D61757468656E746963617465644C000B617574686F7269746965737400164C6A6176612F7574696C2F436F6C6C656374696F6E3B4C000764657461696C737400124C6A6176612F6C616E672F4F626A6563743B787000737200266A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654C697374FC0F2531B5EC8E100200014C00046C6973747400104C6A6176612F7574696C2F4C6973743B7872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C00016371007E00047870737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000014770400000014737200426F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E617574686F726974792E53696D706C654772616E746564417574686F7269747900000000000001F40200014C0004726F6C657400124C6A6176612F6C616E672F537472696E673B787074000E61646D696E3A6D656E753A6164647371007E000D74001661646D696E3A6D656E753A626174636852656D6F76657371007E000D74000F61646D696E3A6D656E753A656469747371007E000D74000F61646D696E3A6D656E753A6C6973747371007E000D74000F61646D696E3A6D656E753A6D656E757371007E000D74001161646D696E3A6D656E753A72656D6F76657371007E000D74000E61646D696E3A726F6C653A6164647371007E000D74001661646D696E3A726F6C653A626174636852656D6F76657371007E000D74000F61646D696E3A726F6C653A656469747371007E000D74001161646D696E3A726F6C653A72656D6F76657371007E000D74000F61646D696E3A726F6C653A726F6C657371007E000D74000E61646D696E3A757365723A6164647371007E000D74001661646D696E3A757365723A626174636852656D6F76657371007E000D74001261646D696E3A757365723A64697361626C657371007E000D74000F61646D696E3A757365723A656469747371007E000D74001161646D696E3A757365723A72656D6F76657371007E000D74001361646D696E3A757365723A72657365745077647371007E000D74000F61646D696E3A757365723A757365727371007E000D74000B636D733A636F6E74656E747371007E000D740008636D733A66696C657871007E000C707372003A6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F41757468325265717565737400000000000000010200075A0008617070726F7665644C000B617574686F72697469657371007E00044C000A657874656E73696F6E7374000F4C6A6176612F7574696C2F4D61703B4C000B726564697265637455726971007E000E4C00077265667265736874003B4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F546F6B656E526571756573743B4C000B7265736F7572636549647374000F4C6A6176612F7574696C2F5365743B4C000D726573706F6E7365547970657371007E003A787200386F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E426173655265717565737436287A3EA37169BD0200034C0008636C69656E74496471007E000E4C001172657175657374506172616D657465727371007E00384C000573636F706571007E003A7870740003617070737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654D6170F1A5A8FE74F507420200014C00016D71007E00387870737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F400000000000067708000000080000000374000A6772616E745F7479706574000870617373776F7264740009636C69656E745F6964740003617070740008757365726E616D6574000561646D696E78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007871007E0009737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000103F4000000000000171007E003D78017371007E004B770C000000103F40000000000000787371007E00403F40000000000000770800000010000000007870707371007E004B770C000000103F40000000000000787371007E004B770C000000103F40000000000000787372004F6F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E557365726E616D6550617373776F726441757468656E7469636174696F6E546F6B656E00000000000001F40200024C000B63726564656E7469616C7371007E00054C00097072696E636970616C71007E00057871007E0003017371007E00077371007E000B0000001477040000001471007E000F71007E001171007E001371007E001571007E001771007E001971007E001B71007E001D71007E001F71007E002171007E002371007E002571007E002771007E002971007E002B71007E002D71007E002F71007E003171007E003371007E00357871007E0054737200176A6176612E7574696C2E4C696E6B6564486173684D617034C04E5C106CC0FB0200015A000B6163636573734F726465727871007E00403F400000000000067708000000080000000474000D636C69656E745F73656372657474000631323334353671007E004271007E004371007E004471007E004571007E004671007E00477800707372002B636F6D2E626F6F74646F2E636C6F7564646F61646D696E2E736563756974792E43757272656E7455736572A0F6D8499537099B0200014C000269647400104C6A6176612F6C616E672F4C6F6E673B787200326F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E7573657264657461696C732E5573657200000000000001F40200075A00116163636F756E744E6F6E457870697265645A00106163636F756E744E6F6E4C6F636B65645A001563726564656E7469616C734E6F6E457870697265645A0007656E61626C65644C000B617574686F72697469657371007E003A4C000870617373776F726471007E000E4C0008757365726E616D6571007E000E7870010101017371007E0048737200116A6176612E7574696C2E54726565536574DD98509395ED875B0300007870737200466F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E7573657264657461696C732E5573657224417574686F72697479436F6D70617261746F7200000000000001F4020000787077040000001471007E000F71007E001171007E001371007E001571007E001771007E001971007E001B71007E001D71007E001F71007E002171007E002371007E002571007E002771007E002971007E002B71007E002D71007E002F71007E003171007E003371007E0035787071007E00477372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000000000001);
+INSERT INTO `oauth_refresh_token` VALUES ('f91f06fa89955f6805a646c74fe24639', 0xACED00057372004C6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744578706972696E674F417574683252656672657368546F6B656E2FDF47639DD0C9B70200014C000A65787069726174696F6E7400104C6A6176612F7574696C2F446174653B787200446F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F417574683252656672657368546F6B656E73E10E0A6354D45E0200014C000576616C75657400124C6A6176612F6C616E672F537472696E673B787074002433343937313131382D343864392D346365332D613136342D6232666433356334646666357372000E6A6176612E7574696C2E44617465686A81014B597419030000787077080000016A767EADEF78, 0xACED0005737200416F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F417574683241757468656E7469636174696F6EBD400B02166252130200024C000D73746F7265645265717565737474003C4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F4F4175746832526571756573743B4C00127573657241757468656E7469636174696F6E7400324C6F72672F737072696E676672616D65776F726B2F73656375726974792F636F72652F41757468656E7469636174696F6E3B787200476F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E416273747261637441757468656E7469636174696F6E546F6B656ED3AA287E6E47640E0200035A000D61757468656E746963617465644C000B617574686F7269746965737400164C6A6176612F7574696C2F436F6C6C656374696F6E3B4C000764657461696C737400124C6A6176612F6C616E672F4F626A6563743B787000737200266A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654C697374FC0F2531B5EC8E100200014C00046C6973747400104C6A6176612F7574696C2F4C6973743B7872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C00016371007E00047870737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A65787000000014770400000014737200426F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E617574686F726974792E53696D706C654772616E746564417574686F7269747900000000000001F40200014C0004726F6C657400124C6A6176612F6C616E672F537472696E673B787074000E61646D696E3A6D656E753A6164647371007E000D74001661646D696E3A6D656E753A626174636852656D6F76657371007E000D74000F61646D696E3A6D656E753A656469747371007E000D74000F61646D696E3A6D656E753A6C6973747371007E000D74000F61646D696E3A6D656E753A6D656E757371007E000D74001161646D696E3A6D656E753A72656D6F76657371007E000D74000E61646D696E3A726F6C653A6164647371007E000D74001661646D696E3A726F6C653A626174636852656D6F76657371007E000D74000F61646D696E3A726F6C653A656469747371007E000D74001161646D696E3A726F6C653A72656D6F76657371007E000D74000F61646D696E3A726F6C653A726F6C657371007E000D74000E61646D696E3A757365723A6164647371007E000D74001661646D696E3A757365723A626174636852656D6F76657371007E000D74001261646D696E3A757365723A64697361626C657371007E000D74000F61646D696E3A757365723A656469747371007E000D74001161646D696E3A757365723A72656D6F76657371007E000D74001361646D696E3A757365723A72657365745077647371007E000D74000F61646D696E3A757365723A757365727371007E000D74000B636D733A636F6E74656E747371007E000D740008636D733A66696C657871007E000C707372003A6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F41757468325265717565737400000000000000010200075A0008617070726F7665644C000B617574686F72697469657371007E00044C000A657874656E73696F6E7374000F4C6A6176612F7574696C2F4D61703B4C000B726564697265637455726971007E000E4C00077265667265736874003B4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F546F6B656E526571756573743B4C000B7265736F7572636549647374000F4C6A6176612F7574696C2F5365743B4C000D726573706F6E7365547970657371007E003A787200386F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E426173655265717565737436287A3EA37169BD0200034C0008636C69656E74496471007E000E4C001172657175657374506172616D657465727371007E00384C000573636F706571007E003A7870740003617070737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654D6170F1A5A8FE74F507420200014C00016D71007E00387870737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F400000000000067708000000080000000374000A6772616E745F7479706574000870617373776F7264740009636C69656E745F6964740003617070740008757365726E616D6574000561646D696E78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007871007E0009737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000103F4000000000000171007E003D78017371007E004B770C000000103F40000000000000787371007E00403F40000000000000770800000010000000007870707371007E004B770C000000103F40000000000000787371007E004B770C000000103F40000000000000787372004F6F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E557365726E616D6550617373776F726441757468656E7469636174696F6E546F6B656E00000000000001F40200024C000B63726564656E7469616C7371007E00054C00097072696E636970616C71007E00057871007E0003017371007E00077371007E000B0000001477040000001471007E000F71007E001171007E001371007E001571007E001771007E001971007E001B71007E001D71007E001F71007E002171007E002371007E002571007E002771007E002971007E002B71007E002D71007E002F71007E003171007E003371007E00357871007E0054737200176A6176612E7574696C2E4C696E6B6564486173684D617034C04E5C106CC0FB0200015A000B6163636573734F726465727871007E00403F400000000000067708000000080000000474000D636C69656E745F73656372657474000631323334353671007E004271007E004371007E004471007E004571007E004671007E00477800707372002B636F6D2E626F6F74646F2E636C6F7564646F61646D696E2E736563756974792E43757272656E7455736572FA08FA21BD5406A90200024C000269647400104C6A6176612F6C616E672F4C6F6E673B4C00046E616D6571007E000E787200326F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E7573657264657461696C732E5573657200000000000001F40200075A00116163636F756E744E6F6E457870697265645A00106163636F756E744E6F6E4C6F636B65645A001563726564656E7469616C734E6F6E457870697265645A0007656E61626C65644C000B617574686F72697469657371007E003A4C000870617373776F726471007E000E4C0008757365726E616D6571007E000E7870010101017371007E0048737200116A6176612E7574696C2E54726565536574DD98509395ED875B0300007870737200466F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E7573657264657461696C732E5573657224417574686F72697479436F6D70617261746F7200000000000001F4020000787077040000001471007E000F71007E001171007E001371007E001571007E001771007E001971007E001B71007E001D71007E001F71007E002171007E002371007E002571007E002771007E002971007E002B71007E002D71007E002F71007E003171007E003371007E0035787071007E00477372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000000000000174000FE8B685E7BAA7E7AEA1E79086E59198);
+
-- ----------------------------
-- Table structure for `sys_dept`
-- ----------------------------
@@ -328,7 +457,6 @@ INSERT INTO `sys_menu` VALUES ('86', '85', '列表', '/api-base/log', null, '2',
INSERT INTO `sys_menu` VALUES ('87', '81', '上传', '/file/upload', null, '2', null, null, null, null, null, null);
INSERT INTO `sys_menu` VALUES ('88', '0', '系统监控', null, null, '0', 'fa fa-video-camera', null, null, null, null, null);
INSERT INTO `sys_menu` VALUES ('89', '88', '服务注册', 'http://localhost:8001', null, '1', null, null, null, null, null, null);
-INSERT INTO `sys_menu` VALUES ('90', '0', '系统工具', null, null, '0', 'fa fa-wrench', null, null, null, null, null);
-- ----------------------------
-- Table structure for `sys_role`
@@ -515,7 +643,6 @@ INSERT INTO `sys_role_menu` VALUES ('2343', '77', '84');
INSERT INTO `sys_role_menu` VALUES ('2344', '77', '72');
INSERT INTO `sys_role_menu` VALUES ('2345', '77', '-1');
INSERT INTO `sys_role_menu` VALUES ('2346', '77', '77');
-INSERT INTO `sys_role_menu` VALUES ('3195', '1', '90');
INSERT INTO `sys_role_menu` VALUES ('3196', '1', '88');
INSERT INTO `sys_role_menu` VALUES ('3197', '1', '89');
INSERT INTO `sys_role_menu` VALUES ('3198', '1', '84');
@@ -581,7 +708,7 @@ CREATE TABLE `sys_user` (
`user_id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) DEFAULT NULL COMMENT '用户名',
`name` varchar(100) DEFAULT NULL,
- `password` varchar(50) DEFAULT NULL COMMENT '密码',
+ `password` varchar(100) DEFAULT NULL COMMENT '密码',
`dept_id` bigint(20) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`mobile` varchar(100) DEFAULT NULL COMMENT '手机号',
@@ -603,7 +730,7 @@ CREATE TABLE `sys_user` (
-- ----------------------------
-- Records of sys_user
-- ----------------------------
-INSERT INTO `sys_user` VALUES ('1', 'admin', '超级管理员', 'd0af8fa1272ef5a152d9e27763eea293', '6', 'admin@example.com', '17699999999', '1', '1', '2017-08-15 21:40:39', '2017-08-15 21:41:00', '96', '2017-12-14 00:00:00', '138', 'ccc', '', '北京市', '北京市市辖区', '东城区');
+INSERT INTO `sys_user` VALUES ('1', 'admin', '超级管理员', '$2a$10$Vp1CxPTT/QBmU88jZYzkXOYgIq04Kvfd.o.YYqFn0y6rC5hgO/Yqe', '6', 'admin@example.com', '17699999999', '1', '1', '2017-08-15 21:40:39', '2017-08-15 21:41:00', '96', '2017-12-14 00:00:00', '138', 'ccc', '', '北京市', '北京市市辖区', '东城区');
INSERT INTO `sys_user` VALUES ('2', 'test', '临时用户', '6cf3bb3deba2aadbd41ec9a22511084e', '6', 'test@bootdo.com', null, '1', '1', '2017-08-14 13:43:05', '2017-08-14 21:15:36', null, null, null, null, null, null, null, null);
INSERT INTO `sys_user` VALUES ('36', 'ldh', '刘德华', 'bfd9394475754fbe45866eba97738c36', '7', 'ldh@bootdo.com', null, '1', null, null, null, null, null, null, null, null, null, null, null);
INSERT INTO `sys_user` VALUES ('123', 'zxy', '张学友', '35174ba93f5fe7267f1fb3c1bf903781', '6', 'zxy@bootdo', null, '0', null, null, null, null, null, null, null, null, null, null, null);
@@ -614,7 +741,7 @@ INSERT INTO `sys_user` VALUES ('132', 'lyf', '刘亦菲', '7fdb1d9008f45950c1620
INSERT INTO `sys_user` VALUES ('134', 'lyh', '李彦宏', 'dc26092b3244d9d432863f2738180e19', '8', 'lyh@bootdo.com', null, '1', null, null, null, null, '2018-03-18 00:00:00', null, null, null, null, null, null);
INSERT INTO `sys_user` VALUES ('135', 'wjl', '王健林', '3967697dfced162cf6a34080259b83aa', '6', 'wjl@bootod.com', null, '1', null, null, null, null, '2018-03-19 00:00:00', null, null, null, null, null, null);
INSERT INTO `sys_user` VALUES ('136', 'gdg2', '郭德纲', '3bb1bda86bc02bf6478cd91e42135d2f', '9', 'gdg@bootdo.com', null, '1', null, null, null, null, '2018-03-07 00:00:00', null, null, null, null, null, null);
-INSERT INTO `sys_user` VALUES ('156', 'test2', '测试二', '9f411bc8445132fba6bef0ee865f9d08', null, 'test2@bootdo', null, null, null, null, null, null, '2018-03-06 00:00:00', null, null, null, null, null, null);
+INSERT INTO `sys_user` VALUES ('156', 'test2', '测试二', '9f411bc8445132fba6bef0ee865f9d08', null, 'test2@bootdo', null, null, null, null, null, null, '2018-03-15 00:00:00', null, null, null, null, null, null);
-- ----------------------------
-- Table structure for `sys_user_plus`
@@ -640,7 +767,7 @@ CREATE TABLE `sys_user_role` (
`user_id` bigint(20) DEFAULT NULL COMMENT '用户ID',
`role_id` bigint(20) DEFAULT NULL COMMENT '角色ID',
PRIMARY KEY (`id`)
-) ENGINE=InnoDB AUTO_INCREMENT=166 DEFAULT CHARSET=utf8 COMMENT='用户与角色对应关系';
+) ENGINE=InnoDB AUTO_INCREMENT=169 DEFAULT CHARSET=utf8 COMMENT='用户与角色对应关系';
-- ----------------------------
-- Records of sys_user_role
@@ -667,7 +794,6 @@ INSERT INTO `sys_user_role` VALUES ('111', '2', '1');
INSERT INTO `sys_user_role` VALUES ('124', null, '48');
INSERT INTO `sys_user_role` VALUES ('127', '123', '48');
INSERT INTO `sys_user_role` VALUES ('132', '36', '48');
-INSERT INTO `sys_user_role` VALUES ('150', '156', '1');
INSERT INTO `sys_user_role` VALUES ('151', '136', '1');
INSERT INTO `sys_user_role` VALUES ('152', '135', '1');
INSERT INTO `sys_user_role` VALUES ('153', '134', '1');
@@ -678,6 +804,7 @@ INSERT INTO `sys_user_role` VALUES ('159', '131', '1');
INSERT INTO `sys_user_role` VALUES ('160', '130', '1');
INSERT INTO `sys_user_role` VALUES ('164', '124', '56');
INSERT INTO `sys_user_role` VALUES ('165', '124', '48');
+INSERT INTO `sys_user_role` VALUES ('168', '156', '1');
-- ----------------------------
-- Table structure for `sys_user_token`
diff --git a/clouddo-admin/pom.xml b/clouddo-admin/pom.xml
index 823d6930bcfb384ea828a67c0a6796a8daf69feb..05d182ef7aa93ca0e8ffeff02e83ba680f6f6999 100644
--- a/clouddo-admin/pom.xml
+++ b/clouddo-admin/pom.xml
@@ -1,156 +1,164 @@
- 4.0.0
-
- com.bootdo
- clouddo-admin
- 0.0.1-SNAPSHOT
- jar
-
- clouddo-admin
- Demo project for Spring Boot
-
-
- org.springframework.boot
- spring-boot-starter-parent
- 2.0.4.RELEASE
-
-
-
-
- UTF-8
- UTF-8
- 1.8
- Finchley.SR1
- 1.1.0.Final
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-eureka-server
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- mysql
- mysql-connector-java
-
-
- org.mybatis
- mybatis
- 3.4.4
-
-
-
- org.mybatis.spring.boot
- mybatis-spring-boot-starter
- 1.1.1
-
-
-
- org.apache.shiro
- shiro-core
- 1.3.2
-
-
-
- com.alibaba
- fastjson
- 1.2.42
-
-
-
- io.jsonwebtoken
- jjwt
- 0.7.0
-
-
-
-
- org.springframework.boot
- spring-boot-starter-websocket
-
-
- org.springframework
- spring-context-support
-
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
+
+ com.bootdo
+ clouddo-admin
+ 0.0.1-SNAPSHOT
+ jar
+
+ clouddo-admin
+ Demo project for Spring Boot
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.0.4.RELEASE
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ Finchley.SR1
+ 1.1.0.Final
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-server
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ mysql
+ mysql-connector-java
+
+
+ org.mybatis
+ mybatis
+ 3.4.4
+
+
+
+ org.mybatis.spring.boot
+ mybatis-spring-boot-starter
+ 1.1.1
+
+
+
+ org.apache.shiro
+ shiro-core
+ 1.3.2
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.42
+
+
+
+ io.jsonwebtoken
+ jjwt
+ 0.7.0
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-websocket
+
+
+ org.springframework
+ spring-context-support
+
com.bootdo
clouddo-common
0.0.1-SNAPSHOT
-
- org.springframework.boot
- spring-boot-starter-security
-
-
-
- net.sf.ehcache
- ehcache
-
-
-
-
- org.mapstruct
- mapstruct-jdk8
- ${org.mapstruct.version}
-
-
- org.mapstruct
- mapstruct
- ${org.mapstruct.version}
-
-
- org.mapstruct
- mapstruct-processor
- ${org.mapstruct.version}
- provided
-
+
+
+
+
+
+
+ net.sf.ehcache
+ ehcache
+
+
+
+
+ org.mapstruct
+ mapstruct-jdk8
+ ${org.mapstruct.version}
+
+
+ org.mapstruct
+ mapstruct
+ ${org.mapstruct.version}
+
+
+ org.mapstruct
+ mapstruct-processor
+ ${org.mapstruct.version}
+ provided
+
+
+ org.springframework.cloud
+ spring-cloud-starter-security
+
+
+ org.springframework.cloud
+ spring-cloud-starter-oauth2
+
-
-
-
- org.springframework.cloud
- spring-cloud-dependencies
- ${spring-cloud.version}
- pom
- import
-
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.6.1
-
- 1.8
- 1.8
-
-
- org.mapstruct
- mapstruct-processor
- ${org.mapstruct.version}
-
-
-
-
-
-
+
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.6.1
+
+ 1.8
+ 1.8
+
+
+ org.mapstruct
+ mapstruct-processor
+ ${org.mapstruct.version}
+
+
+
+
+
+
diff --git a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/AuthConfig.java b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/AuthConfig.java
index 0e14b9a97ad81639f45230cb83876b4f68ee0524..c9335c19fb7de2a46ec30f4c8b7157ba347abf2c 100644
--- a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/AuthConfig.java
+++ b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/AuthConfig.java
@@ -9,21 +9,21 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
@Configuration
public class AuthConfig extends WebMvcConfigurerAdapter {
- @Bean
- public AuthIntercepter authIntercepter() {
- return new AuthIntercepter();
- }
-
- @Override
- public void addInterceptors(InterceptorRegistry registry) {
- InterceptorRegistration addInterceptor = registry.addInterceptor(authIntercepter());
-
- // 排除配置
- addInterceptor.excludePathPatterns("/error");
- addInterceptor.excludePathPatterns("/login**");
- addInterceptor.excludePathPatterns("/test**");
-
- // 拦截配置
- addInterceptor.addPathPatterns("/**");
- }
+// @Bean
+// public AuthIntercepter authIntercepter() {
+// return new AuthIntercepter();
+// }
+//
+// @Override
+// public void addInterceptors(InterceptorRegistry registry) {
+// InterceptorRegistration addInterceptor = registry.addInterceptor(authIntercepter());
+//
+// // 排除配置
+// addInterceptor.excludePathPatterns("/error");
+// addInterceptor.excludePathPatterns("/login**");
+// addInterceptor.excludePathPatterns("/test**");
+//
+// // 拦截配置
+// addInterceptor.addPathPatterns("/**");
+// }
}
diff --git a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/Oauth2ServiceConfig.java b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/Oauth2ServiceConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..953f5be9eb3ed6913b7dcdfa1fab799ef5daeabc
--- /dev/null
+++ b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/Oauth2ServiceConfig.java
@@ -0,0 +1,64 @@
+package com.bootdo.clouddoadmin.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
+import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
+import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerSecurityConfigurer;
+import org.springframework.security.oauth2.provider.token.store.JdbcTokenStore;
+import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;
+
+import javax.sql.DataSource;
+
+/**
+ * @author bootdo
+ */
+@Configuration
+@EnableAuthorizationServer
+public class Oauth2ServiceConfig extends AuthorizationServerConfigurerAdapter {
+ @Autowired
+ AuthenticationManager authenticationManager;
+
+ @Autowired
+ DataSource dataSource;
+ @Override
+ public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
+ clients.inMemory()
+ .withClient("app")
+ .scopes("app")
+ .authorizedGrantTypes("password","authorization_code", "refresh_token")
+ .secret(new BCryptPasswordEncoder().encode("123456"));
+ }
+
+ @Override
+ public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
+ endpoints.authenticationManager(authenticationManager);
+ endpoints.tokenStore(jdbcTokenStore());
+ }
+
+ JdbcTokenStore jdbcTokenStore(){
+ return new JdbcTokenStore(dataSource);
+ }
+
+// @Bean
+// RedisTokenStore redisTokenStore(){
+// return new RedisTokenStore(connectionFactory);
+// }
+
+ @Override
+ public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
+ security
+ // 开启/oauth/token_key验证端口无权限访问
+ .tokenKeyAccess("permitAll()")
+ // 开启/oauth/check_token验证端口认证权限访问
+ .checkTokenAccess("isAuthenticated()")
+ .allowFormAuthenticationForClients();
+ }
+
+
+}
diff --git a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/ResourceServerConfig.java b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/ResourceServerConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5efcadecc06376b4d558239d0e19762f5111094
--- /dev/null
+++ b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/ResourceServerConfig.java
@@ -0,0 +1,26 @@
+package com.bootdo.clouddoadmin.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+
+import javax.servlet.http.HttpServletResponse;
+
+@Configuration
+@EnableResourceServer
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+
+ @Override
+ public void configure(HttpSecurity http) throws Exception {
+ http
+ .csrf().disable()
+ .exceptionHandling()
+ .authenticationEntryPoint((request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED))
+ .and()
+ .authorizeRequests()
+ .anyRequest().authenticated()
+ .and()
+ .httpBasic();
+ }
+}
\ No newline at end of file
diff --git a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/SecurityConfigurerAdapter.java b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/SecurityConfigurerAdapter.java
new file mode 100644
index 0000000000000000000000000000000000000000..433a80a5cac986409b663657d9ad1e9ac592cf49
--- /dev/null
+++ b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/config/SecurityConfigurerAdapter.java
@@ -0,0 +1,44 @@
+package com.bootdo.clouddoadmin.config;
+
+
+import com.bootdo.clouddoadmin.service.impl.UserServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.BeanIds;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+@Configuration
+@EnableWebSecurity
+public class SecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
+
+ @Autowired
+ UserDetailsService userDetail;
+
+ @Bean(name = BeanIds.AUTHENTICATION_MANAGER)
+ @Override
+ public AuthenticationManager authenticationManagerBean() throws Exception {
+ return super.authenticationManagerBean();
+ }
+
+
+ @Override
+ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
+ auth
+ .userDetailsService(userDetail)
+ .passwordEncoder(passwordEncoder());
+
+ }
+
+
+ @Bean
+ PasswordEncoder passwordEncoder(){
+ return new BCryptPasswordEncoder();
+ }
+}
diff --git a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/LoginController.java b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/LoginController.java
index 61a54312947707ec68760acb52ad767e362fbc24..8934d1d7b891724f3778ac6e14d9365190ab0b58 100644
--- a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/LoginController.java
+++ b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/LoginController.java
@@ -5,6 +5,7 @@ import com.bootdo.clouddoadmin.service.MenuService;
import com.bootdo.clouddoadmin.service.TokenService;
import com.bootdo.clouddoadmin.service.UserService;
import com.bootdo.clouddoadmin.utils.MD5Utils;
+import com.bootdo.clouddoadmin.utils.SecuityUtils;
import com.bootdo.clouddocommon.annotation.Log;
import com.bootdo.clouddocommon.context.FilterContextHandler;
import com.bootdo.clouddocommon.dto.LoginDTO;
@@ -12,6 +13,7 @@ import com.bootdo.clouddocommon.dto.UserToken;
import com.bootdo.clouddocommon.utils.JwtUtils;
import com.bootdo.clouddocommon.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.oauth2.provider.token.ConsumerTokenServices;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.Cookie;
@@ -35,43 +37,18 @@ public class LoginController {
TokenService tokenService;
@Autowired
MenuService menuService;
+ @Autowired
+ private ConsumerTokenServices consumerTokenServices;
- @Log("登录")
- @PostMapping("/login")
- R login(@Valid @RequestBody LoginDTO loginDTO, HttpServletRequest request, HttpServletResponse response) {
- String username = loginDTO.getUsername().trim();
- String password = loginDTO.getPwd().trim();
- password = MD5Utils.encrypt(username, password);
- Map param = new HashMap<>();
- param.put("username", username);
- List userDOs = userService.list(param);
- if(userDOs.size()<1){
- return R.error("用户或密码错误");
- }
- UserDO userDO = userDOs.get(0);
- if (null == userDO || !userDO.getPassword().equals(password)) {
- return R.error("用户或密码错误");
- }
- UserToken userToken = new UserToken(userDO.getUsername(), userDO.getUserId().toString(), userDO.getName());
- String token="";
- try {
- token = JwtUtils.generateToken(userToken, 2*60*60*1000);
- } catch (Exception e) {
- e.printStackTrace();
- }
- //首先清除用户缓存权限
- menuService.clearCache(userDO.getUserId());
- // String token = tokenService.createToken(userDO.getUserId());
- return R.ok("登录成功")
- .put("token", token).put("user",userDO)
- .put("perms",menuService.PermsByUserId(userDO.getUserId()))
- .put("router",menuService.RouterDTOsByUserId(userDO.getUserId()));
+ @GetMapping("/router")
+ R router() {
+ return R.ok().put("router", menuService.RouterDTOsByUserId(SecuityUtils.getCurrentUser().getId()));
}
@RequestMapping("/logout")
- R logout(HttpServletRequest request, HttpServletResponse response) {
- menuService.clearCache(Long.parseLong(FilterContextHandler.getUserID()));
+ R logout(String token) {
+ consumerTokenServices.revokeToken(token);
return R.ok();
}
diff --git a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/MenuController.java b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/MenuController.java
index 1dcab5d831f6d2a5238f3bf2a776c9c1bd6edb28..2e319c33ca6c2cd2598ab9af7ca7950c91126562 100644
--- a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/MenuController.java
+++ b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/MenuController.java
@@ -3,6 +3,7 @@ package com.bootdo.clouddoadmin.controller;
import com.bootdo.clouddoadmin.domain.MenuDO;
import com.bootdo.clouddoadmin.domain.Tree;
import com.bootdo.clouddoadmin.service.MenuService;
+import com.bootdo.clouddoadmin.utils.SecuityUtils;
import com.bootdo.clouddocommon.annotation.Log;
import com.bootdo.clouddocommon.context.FilterContextHandler;
import com.bootdo.clouddocommon.dto.MenuDTO;
@@ -24,13 +25,20 @@ public class MenuController {
@Autowired
MenuService menuService;
+ @Log("获取当前用户的菜单")
+ @GetMapping("currentUserMenus")
+ R currentUserMenus() {
+ return R.ok().put("currentUserMenus",menuService.RouterDTOsByUserId(SecuityUtils.getCurrentUser().getId()));
+ }
+
@Log("访问菜单")
@GetMapping("tree")
- Tree tree(){
+ Tree tree() {
return menuService.getTree();
}
+
@GetMapping
- List> list(){
+ List> list() {
return menuService.getTree().getChildren();
}
@@ -47,30 +55,31 @@ public class MenuController {
}
@PutMapping()
- R update(@RequestBody MenuDO menuDO){
- if(menuService.update(menuDO)>0){
+ R update(@RequestBody MenuDO menuDO) {
+ if (menuService.update(menuDO) > 0) {
return R.ok();
}
- return R.error();
+ return R.error();
}
+
@PostMapping
- R save(@RequestBody MenuDO menuDO){
- return R.operate(menuService.save(menuDO)>0);
+ R save(@RequestBody MenuDO menuDO) {
+ return R.operate(menuService.save(menuDO) > 0);
}
@DeleteMapping()
- R remove(Long id){
- if(menuService.remove(id)>0){
+ R remove(Long id) {
+ if (menuService.remove(id) > 0) {
return R.ok();
}
return R.error();
}
@GetMapping("userMenus")
- List userMenus(){
+ List userMenus() {
List menuDOS = menuService.userMenus(Long.parseLong(FilterContextHandler.getUserID()));
List menuDTOS = new ArrayList<>();
- for (MenuDO menuDO:menuDOS){
+ for (MenuDO menuDO : menuDOS) {
MenuDTO menuDTO = new MenuDTO();
menuDTO.setMenuId(menuDO.getMenuId());
menuDTO.setUrl(menuDO.getUrl());
@@ -81,26 +90,27 @@ public class MenuController {
}
@GetMapping("clearCache")
- R clearCache(){
+ R clearCache() {
Boolean flag = menuService.clearCache(Long.parseLong(FilterContextHandler.getUserID()));
- if (flag){
- return R.ok();
+ if (flag) {
+ return R.ok();
}
return R.error();
}
- /**
- * 当前用户菜单的树形结构
- * @return
- */
- @RequestMapping("/currentUserMenus")
- List> currentUserMenus() {
- List> menus = menuService.listMenuTree(Long.parseLong(FilterContextHandler.getUserID()));
- return menus;
- }
+// /**
+// * 当前用户菜单的树形结构
+// *
+// * @return
+// */
+// @RequestMapping("/currentUserMenus")
+// List> currentUserMenus() {
+// List> menus = menuService.listMenuTree(Long.parseLong(FilterContextHandler.getUserID()));
+// return menus;
+// }
@GetMapping("/roleId")
- List menuIdsByRoleId(Long roleId){
+ List menuIdsByRoleId(Long roleId) {
return menuService.MenuIdsByRoleId(roleId);
}
}
diff --git a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/RoleController.java b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/RoleController.java
index c176e3311b13ac685c09507818ca068f60cba531..932325c7005b23d78814b812786840ca488adb8c 100644
--- a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/RoleController.java
+++ b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/RoleController.java
@@ -7,6 +7,7 @@ import com.bootdo.clouddocommon.utils.PageUtils;
import com.bootdo.clouddocommon.utils.Query;
import com.bootdo.clouddocommon.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -22,6 +23,7 @@ public class RoleController {
@Autowired
RoleService roleService;
+ @PreAuthorize("hasAuthority('admin:role:role')")
@GetMapping()
PageUtils list(@RequestParam Map params) {
Query query = new Query(params);
diff --git a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/UserController.java b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/UserController.java
index 31380cedb62fe0dd094bc57f2681f216ad17515c..36fe8ca086de855b75f7926e2f2acd3a04f01e9b 100644
--- a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/UserController.java
+++ b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/controller/UserController.java
@@ -7,6 +7,7 @@ import com.bootdo.clouddoadmin.dto.do2dto.UserConvert;
import com.bootdo.clouddoadmin.service.RoleService;
import com.bootdo.clouddoadmin.service.UserService;
import com.bootdo.clouddoadmin.utils.MD5Utils;
+import com.bootdo.clouddoadmin.utils.SecuityUtils;
import com.bootdo.clouddocommon.annotation.Log;
import com.bootdo.clouddocommon.context.FilterContextHandler;
import com.bootdo.clouddocommon.dto.LoginUserDTO;
@@ -22,6 +23,7 @@ import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
+import java.security.Principal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -45,9 +47,9 @@ public class UserController extends BaseController {
@GetMapping("/currentUser")
LoginUserDTO currentUser(){
LoginUserDTO loginUserDTO = new LoginUserDTO();
- loginUserDTO.setUserId(FilterContextHandler.getUserID());
+ loginUserDTO.setUserId(SecuityUtils.getCurrentUser().getId().toString());
loginUserDTO.setUsername(FilterContextHandler.getUsername());
- loginUserDTO.setName(FilterContextHandler.getName());
+ loginUserDTO.setName(SecuityUtils.getCurrentUser().getName());
return loginUserDTO;
}
@@ -125,4 +127,9 @@ public class UserController extends BaseController {
// 存在,不通过,false
return !userService.exits(params);
}
+
+ @GetMapping("/tokenUser")
+ public Principal user(Principal user){
+ return user;
+ }
}
diff --git a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/secuity/CurrentUser.java b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/secuity/CurrentUser.java
new file mode 100644
index 0000000000000000000000000000000000000000..02fa7900b7cc614bedff0cee03016f747b20c848
--- /dev/null
+++ b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/secuity/CurrentUser.java
@@ -0,0 +1,38 @@
+package com.bootdo.clouddoadmin.secuity;
+
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.User;
+
+import java.util.Collection;
+
+public class CurrentUser extends User {
+ public CurrentUser(String username, String password, Long id, Collection extends GrantedAuthority> authorities) {
+ super(username, password, authorities);
+ setId(id);
+ }
+ public CurrentUser(String username, String password, Long id,String name, Collection extends GrantedAuthority> authorities) {
+ super(username, password, authorities);
+ setId(id);
+ setName(name);
+ }
+
+ private Long id;
+
+ private String name;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/impl/MenuServiceImpl.java b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/impl/MenuServiceImpl.java
index f8388b2f6d6b6360aa936624eeab95a757d1cd11..bf82d1d84e8f3788a7abb4f882fe89cd0df1790e 100644
--- a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/impl/MenuServiceImpl.java
+++ b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/impl/MenuServiceImpl.java
@@ -154,13 +154,7 @@ public class MenuServiceImpl implements MenuService {
@Override
public Set listPerms(Long userId) {
List perms = menuMapper.listUserPerms(userId);
- Set permsSet = new HashSet<>();
- for (String perm : perms) {
- if (StringUtils.isNotBlank(perm)) {
- permsSet.addAll(Arrays.asList(perm.trim().split(",")));
- }
- }
- return permsSet;
+ return new HashSet<>(perms);
}
/**
diff --git a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/impl/UserDetailsServiceImpl.java b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/impl/UserDetailsServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..61dd194343f988e1b3c568d609f680aeddde1200
--- /dev/null
+++ b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/service/impl/UserDetailsServiceImpl.java
@@ -0,0 +1,46 @@
+package com.bootdo.clouddoadmin.service.impl;
+
+import com.bootdo.clouddoadmin.dao.UserDao;
+import com.bootdo.clouddoadmin.domain.UserDO;
+import com.bootdo.clouddoadmin.secuity.CurrentUser;
+import com.bootdo.clouddoadmin.service.MenuService;
+import com.bootdo.clouddoadmin.utils.MD5Utils;
+import com.bootdo.clouddocommon.exception.CDException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.userdetails.User;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.stereotype.Component;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author bootdo
+ */
+@Component
+public class UserDetailsServiceImpl implements UserDetailsService {
+ @Autowired
+ UserDao userDao;
+ @Autowired
+ MenuService menuService;
+
+ @Override
+ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ List userDOS = userDao.list(new HashMap() {{
+ put("username", username);
+ }});
+ if (userDOS.size() < 1) {
+ throw new CDException("用户名或密码错误!");
+ }
+ UserDO userDO = userDOS.get(0);
+ Set perms = menuService.listPerms(userDO.getUserId());
+ Set authorities = perms.stream().filter(Objects::nonNull).map(SimpleGrantedAuthority::new).collect(Collectors.toSet());
+ return new CurrentUser(username, userDO.getPassword(), userDO.getUserId(), userDO.getName(),authorities);
+ }
+
+}
diff --git a/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/utils/SecuityUtils.java b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/utils/SecuityUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..7bb01c8425943f44ff2d2294a6553a067b70444a
--- /dev/null
+++ b/clouddo-admin/src/main/java/com/bootdo/clouddoadmin/utils/SecuityUtils.java
@@ -0,0 +1,13 @@
+package com.bootdo.clouddoadmin.utils;
+
+import com.bootdo.clouddoadmin.secuity.CurrentUser;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.core.userdetails.UserDetails;
+
+public class SecuityUtils {
+ public static CurrentUser getCurrentUser() {
+ return (CurrentUser) SecurityContextHolder.getContext()
+ .getAuthentication()
+ .getPrincipal();
+ }
+}
diff --git a/clouddo-base/pom.xml b/clouddo-base/pom.xml
index 6990c63c0b3b9c28131508c99bb1f051df25c032..4dba6edc4b1f24cd768f362005ce298569065880 100644
--- a/clouddo-base/pom.xml
+++ b/clouddo-base/pom.xml
@@ -63,6 +63,11 @@
clouddo-common
0.0.1-SNAPSHOT
+
+
+ org.springframework.cloud
+ spring-cloud-starter-oauth2
+
diff --git a/clouddo-base/src/main/java/com/bootdo/clouddobase/ClouddoBaseApplication.java b/clouddo-base/src/main/java/com/bootdo/clouddobase/ClouddoBaseApplication.java
index 2595ae7855ea7879d765a5e59191dd226d459712..3ec410bc6da60b28cca91e95f5efec79219d6f8d 100644
--- a/clouddo-base/src/main/java/com/bootdo/clouddobase/ClouddoBaseApplication.java
+++ b/clouddo-base/src/main/java/com/bootdo/clouddobase/ClouddoBaseApplication.java
@@ -3,7 +3,14 @@ package com.bootdo.clouddobase;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+/**
+ * @author bootdo
+ */
+@EnableOAuth2Sso
+@EnableGlobalMethodSecurity(prePostEnabled = true)
@MapperScan(basePackages = {"com.bootdo.*.dao"})
@SpringBootApplication
public class ClouddoBaseApplication {
diff --git a/clouddo-base/src/main/java/com/bootdo/clouddobase/config/ResourceServerConfig.java b/clouddo-base/src/main/java/com/bootdo/clouddobase/config/ResourceServerConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..fcdeab73f08f0fe415046e01a51823cc6722be97
--- /dev/null
+++ b/clouddo-base/src/main/java/com/bootdo/clouddobase/config/ResourceServerConfig.java
@@ -0,0 +1,38 @@
+package com.bootdo.clouddobase.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.annotation.Order;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
+import org.springframework.web.context.request.RequestContextListener;
+
+import javax.servlet.http.HttpServletResponse;
+
+@Configuration
+@EnableResourceServer
+public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
+
+ @Override
+ public void configure(HttpSecurity http) throws Exception {
+ http
+ .csrf().disable()
+ .antMatcher("/**")
+ .exceptionHandling()
+ .authenticationEntryPoint((request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED))
+ .and()
+ .authorizeRequests()
+ .anyRequest().authenticated()
+ .and()
+ .httpBasic();
+ }
+
+ @Bean
+ @Order(0)
+ public RequestContextListener requestContextListener() {
+ return new RequestContextListener();
+ }
+
+
+}
\ No newline at end of file
diff --git a/clouddo-base/src/main/java/com/bootdo/clouddobase/controller/LogController.java b/clouddo-base/src/main/java/com/bootdo/clouddobase/controller/LogController.java
index 71762af44c9d71e8da24c0e5540e97fef6a952bb..555217d9ec74a4fdb1a0ea1848f6ac302e138c2e 100644
--- a/clouddo-base/src/main/java/com/bootdo/clouddobase/controller/LogController.java
+++ b/clouddo-base/src/main/java/com/bootdo/clouddobase/controller/LogController.java
@@ -50,4 +50,6 @@ public class LogController {
}
return R.error();
}
+
+
}
diff --git a/clouddo-base/src/main/java/com/bootdo/clouddobase/controller/UserController.java b/clouddo-base/src/main/java/com/bootdo/clouddobase/controller/UserController.java
new file mode 100644
index 0000000000000000000000000000000000000000..5843546b862143e3fbdd0368f2ebc84aba11a21e
--- /dev/null
+++ b/clouddo-base/src/main/java/com/bootdo/clouddobase/controller/UserController.java
@@ -0,0 +1,19 @@
+package com.bootdo.clouddobase.controller;
+
+import org.aspectj.weaver.ast.HasAnnotation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.security.Principal;
+
+@RestController
+@RequestMapping
+public class UserController {
+ @GetMapping("user")
+ @PreAuthorize("hasAuthority('query-demo')")
+ public Principal user(Principal user){
+ return user;
+ }
+}
diff --git a/clouddo-base/src/main/resources/application.yml b/clouddo-base/src/main/resources/application.yml
index 4cedf53447bd3069d5cbd5e6e6fdcc9998350599..f373aedbfbb79edfabccb46d9a7510b29ff84d3f 100644
--- a/clouddo-base/src/main/resources/application.yml
+++ b/clouddo-base/src/main/resources/application.yml
@@ -12,4 +12,14 @@ spring:
mybatis:
mapper-locations: mapper/**Mapper.xml
configuration:
- map-underscore-to-camel-case: true
\ No newline at end of file
+ map-underscore-to-camel-case: true
+security:
+ oauth2:
+ client:
+ access-token-uri: http://localhost:8005/oauth/token
+ user-authorization-uri: http://localhost:8005/oauth/authorize
+ client-id: app
+ clientAuthenticationScheme: form
+ resource:
+ user-info-uri: http://localhost:8005/user/tokenUser
+ prefer-token-info: false
\ No newline at end of file
diff --git a/clouddo-common/pom.xml b/clouddo-common/pom.xml
index ec6e2cc391e7f20111bdb0c7d9cf14be6c159183..09b3de368c67a5d0611a6a56921c17620b514749 100644
--- a/clouddo-common/pom.xml
+++ b/clouddo-common/pom.xml
@@ -81,6 +81,11 @@
RELEASE
+
+ org.springframework.cloud
+ spring-cloud-starter-oauth2
+
+
@@ -96,13 +101,13 @@
-
-
-
-
-
+
+
+
+
+
-
+
diff --git a/clouddo-common/src/main/java/com/bootdo/clouddocommon/exception/CDException.java b/clouddo-common/src/main/java/com/bootdo/clouddocommon/exception/CDException.java
new file mode 100644
index 0000000000000000000000000000000000000000..3eeefd6aaa47bd4912ea4ae9e1efa9f87563dd6f
--- /dev/null
+++ b/clouddo-common/src/main/java/com/bootdo/clouddocommon/exception/CDException.java
@@ -0,0 +1,10 @@
+package com.bootdo.clouddocommon.exception;
+
+/**
+ * @author bootdo
+ */
+public class CDException extends RuntimeException {
+ public CDException(String message) {
+ super(message);
+ }
+}
diff --git a/clouddo-common/src/main/java/com/bootdo/clouddocommon/exception/CommonExceptionHandler.java b/clouddo-common/src/main/java/com/bootdo/clouddocommon/exception/CommonExceptionHandler.java
index a354bb549eb281b58049b975f22f3beb9bbb574f..76ea4e5616b77e8e08983481aede37239da4c134 100644
--- a/clouddo-common/src/main/java/com/bootdo/clouddocommon/exception/CommonExceptionHandler.java
+++ b/clouddo-common/src/main/java/com/bootdo/clouddocommon/exception/CommonExceptionHandler.java
@@ -1,13 +1,18 @@
package com.bootdo.clouddocommon.exception;
import com.bootdo.clouddocommon.utils.R;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
public class CommonExceptionHandler {
+ private Logger logger = LoggerFactory.getLogger(getClass());
+
@ExceptionHandler(Exception.class)
R exception(Exception e) {
+ logger.error(e.getMessage(), e);
return R.error(500, e.getMessage());
}
}
diff --git a/clouddo-common/src/main/java/com/bootdo/clouddocommon/intercepter/OAuth2FeignRequestInterceptor.java b/clouddo-common/src/main/java/com/bootdo/clouddocommon/intercepter/OAuth2FeignRequestInterceptor.java
new file mode 100644
index 0000000000000000000000000000000000000000..ccaf0a72e252e0ff871348b4123f647bcaa46eaa
--- /dev/null
+++ b/clouddo-common/src/main/java/com/bootdo/clouddocommon/intercepter/OAuth2FeignRequestInterceptor.java
@@ -0,0 +1,35 @@
+//package com.bootdo.clouddocommon.intercepter;
+//
+//import feign.RequestInterceptor;
+//import feign.RequestTemplate;
+//import org.springframework.security.oauth2.client.OAuth2RestTemplate;
+//
+//public class OAuth2FeignRequestInterceptor implements RequestInterceptor {
+//
+// private static final String AUTHORIZATION_HEADER = "Authorization";
+//
+// private static final String BEARER_TOKEN_TYPE = "bearer";
+//
+// private final OAuth2RestTemplate oAuth2RestTemplate;
+//
+//
+// /**
+// * Instantiates a new O auth 2 feign request interceptor.
+// *
+// * @param oAuth2RestTemplate the o auth 2 rest template
+// */
+// OAuth2FeignRequestInterceptor(OAuth2RestTemplate oAuth2RestTemplate) {
+// this.oAuth2RestTemplate = oAuth2RestTemplate;
+// }
+//
+// /**
+// * Apply.
+// *
+// * @param template the template
+// */
+// @Override
+// public void apply(RequestTemplate template) {
+// template.header(AUTHORIZATION_HEADER, String.format("%s %s", BEARER_TOKEN_TYPE, oAuth2RestTemplate.getAccessToken().toString()));
+//
+// }
+//}
\ No newline at end of file
diff --git a/clouddo-zuul/pom.xml b/clouddo-zuul/pom.xml
index 15f25a585f3ef8ddea9682849eeec3a164b5e126..88ca065f317733565d53114ddce994beb445e837 100644
--- a/clouddo-zuul/pom.xml
+++ b/clouddo-zuul/pom.xml
@@ -25,6 +25,7 @@
Finchley.SR1
+
org.springframework.cloud
@@ -40,6 +41,12 @@
spring-cloud-starter-openfeign
+
+
+
+
+
+
io.jsonwebtoken
jjwt
@@ -51,11 +58,11 @@
spring-boot-starter-test
test
-
- com.bootdo
- clouddo-common
- 0.0.1-SNAPSHOT
-
+
+
+
+
+
org.springframework.cloud
diff --git a/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/ClouddoZuulApplication.java b/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/ClouddoZuulApplication.java
index 9fb8901e67978a5795762a50ccb1899483a96ac4..8fe1a37a4667bf5001c45b9d2047588c3c5fcafd 100644
--- a/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/ClouddoZuulApplication.java
+++ b/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/ClouddoZuulApplication.java
@@ -11,6 +11,7 @@ import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
+//@EnableOAuth2Sso
@EnableFeignClients
@EnableZuulProxy
@EnableEurekaClient
diff --git a/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/controller/LoginController.java b/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/controller/LoginController.java
index acde1177f4db54257e15b88758de26589c34075c..a0b2e6e6076783d53360da888ec14d5be3974242 100644
--- a/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/controller/LoginController.java
+++ b/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/controller/LoginController.java
@@ -1,26 +1,24 @@
-package com.bootdo.clouddozuul.controller;
-
-import com.bootdo.clouddocommon.constants.CommonConstants;
-import com.bootdo.clouddocommon.context.FilterContextHandler;
-import com.bootdo.clouddocommon.dto.MenuDTO;
-import com.bootdo.clouddozuul.prc.admin.MenuService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-
-/**
- * @version V1.0
- */
-@RestController
-public class LoginController {
- @Autowired
- MenuService menuService;
- @GetMapping({"/test"})
- List login(HttpServletRequest request) {
- FilterContextHandler.setToken(request.getHeader(CommonConstants.CONTEXT_TOKEN));
- return menuService.userMenus();
- }
-}
+//package com.bootdo.clouddozuul.controller;
+//
+//
+//import com.netflix.discovery.CommonConstants;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.web.bind.annotation.GetMapping;
+//import org.springframework.web.bind.annotation.RestController;
+//
+//import javax.servlet.http.HttpServletRequest;
+//import java.util.List;
+//
+///**
+// * @version V1.0
+// */
+//@RestController
+//public class LoginController {
+// @Autowired
+// MenuService menuService;
+// @GetMapping({"/test"})
+// List login(HttpServletRequest request) {
+// FilterContextHandler.setToken(request.getHeader(CommonConstants.CONTEXT_TOKEN));
+// return menuService.userMenus();
+// }
+//}
diff --git a/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/filter/AccessFilter.java b/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/filter/AccessFilter.java
index 1ddf169767bce62356f9fda5cda271f5a78d5bbc..766562cc97381656c7188e8e9ae2a193ee0bfcdd 100644
--- a/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/filter/AccessFilter.java
+++ b/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/filter/AccessFilter.java
@@ -1,14 +1,5 @@
package com.bootdo.clouddozuul.filter;
-import com.bootdo.clouddocommon.constants.CommonConstants;
-import com.bootdo.clouddocommon.context.FilterContextHandler;
-import com.bootdo.clouddocommon.dto.MenuDTO;
-import com.bootdo.clouddocommon.dto.UserToken;
-import com.bootdo.clouddocommon.utils.JSONUtils;
-import com.bootdo.clouddocommon.utils.JwtUtils;
-import com.bootdo.clouddocommon.utils.R;
-import com.bootdo.clouddocommon.utils.StringUtils;
-import com.bootdo.clouddozuul.prc.admin.MenuService;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,8 +18,6 @@ import java.util.Set;
* @Author bootdo 1992lcg@163.com
*/
public class AccessFilter extends ZuulFilter {
- @Autowired
- MenuService menuService;
private String ignorePath = "/api-admin/login";
@@ -52,30 +41,30 @@ public class AccessFilter extends ZuulFilter {
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
- HttpServletRequest request = ctx.getRequest();
- final String requestUri = request.getRequestURI();
- if (isStartWith(requestUri)) {
- return null;
- }
- String accessToken = request.getHeader(CommonConstants.CONTEXT_TOKEN);
- if(null == accessToken || accessToken == ""){
- accessToken = request.getParameter(CommonConstants.TOKEN);
- }
- if (null == accessToken) {
- setFailedRequest(R.error401(), 200);
- return null;
- }
- try {
- UserToken userToken = JwtUtils.getInfoFromToken(accessToken);
- } catch (Exception e) {
- setFailedRequest(R.error401(), 200);
- return null;
- }
- FilterContextHandler.setToken(accessToken);
- if(!havePermission(request)){
- setFailedRequest(R.error403(), 200);
- return null;
- }
+// HttpServletRequest request = ctx.getRequest();
+// final String requestUri = request.getRequestURI();
+// if (isStartWith(requestUri)) {
+// return null;
+// }
+// String accessToken = request.getHeader(CommonConstants.CONTEXT_TOKEN);
+// if(null == accessToken || accessToken == ""){
+// accessToken = request.getParameter(CommonConstants.TOKEN);
+// }
+// if (null == accessToken) {
+// setFailedRequest(R.error401(), 200);
+// return null;
+// }
+// try {
+// UserToken userToken = JwtUtils.getInfoFromToken(accessToken);
+// } catch (Exception e) {
+// setFailedRequest(R.error401(), 200);
+// return null;
+// }
+// FilterContextHandler.setToken(accessToken);
+// if(!havePermission(request)){
+// setFailedRequest(R.error403(), 200);
+// return null;
+// }
Set headers = (Set) ctx.get("ignoredHeaders");
//We need our JWT tokens relayed to resource servers
//添加自己header
@@ -90,40 +79,5 @@ public class AccessFilter extends ZuulFilter {
// return null;
}
- private void setFailedRequest(Object body, int code) {
- RequestContext ctx = RequestContext.getCurrentContext();
- ctx.setResponseStatusCode(code);
- HttpServletResponse response = ctx.getResponse();
- PrintWriter out = null;
- try{
- out = response.getWriter();
- out.write(JSONUtils.beanToJson(body));
- out.flush();
- }catch(IOException e){
- e.printStackTrace();
- }
- ctx.setSendZuulResponse(false);
- }
-
- private boolean havePermission(HttpServletRequest request){
- String currentURL = request.getRequestURI();
- List menuDTOS = menuService.userMenus();
- for(MenuDTO menuDTO:menuDTOS){
- if(currentURL!=null&&null!=menuDTO.getUrl()&¤tURL.startsWith(menuDTO.getUrl())){
- return true;
- }
- }
- return false;
- }
-
- private boolean isStartWith(String requestUri) {
- boolean flag = false;
- for (String s : ignorePath.split(",")) {
- if (requestUri.startsWith(s)) {
- return true;
- }
- }
- return flag;
- }
}
diff --git a/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/prc/admin/MenuService.java b/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/prc/admin/MenuService.java
index 9937ca44be9300c090d91ede86fb6d2c9ae166c5..1b45b429dd4a52ab892c5b5e64fa798d8ef32291 100644
--- a/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/prc/admin/MenuService.java
+++ b/clouddo-zuul/src/main/java/com/bootdo/clouddozuul/prc/admin/MenuService.java
@@ -1,16 +1,16 @@
-package com.bootdo.clouddozuul.prc.admin;
-
-import com.bootdo.clouddocommon.dto.MenuDTO;
-import com.bootdo.clouddocommon.intercepter.FeignIntercepter;
-import feign.Headers;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-
-import java.util.List;
-
-@Headers("Content-Type:application/json")
-@FeignClient(name = "api-admin", configuration = FeignIntercepter.class)
-public interface MenuService {
- @GetMapping("/menu/userMenus")
- List userMenus();
-}
+//package com.bootdo.clouddozuul.prc.admin;
+//
+//import com.bootdo.clouddocommon.dto.MenuDTO;
+//import com.bootdo.clouddocommon.intercepter.FeignIntercepter;
+//import feign.Headers;
+//import org.springframework.cloud.openfeign.FeignClient;
+//import org.springframework.web.bind.annotation.GetMapping;
+//
+//import java.util.List;
+//
+//@Headers("Content-Type:application/json")
+//@FeignClient(name = "api-admin", configuration = FeignIntercepter.class)
+//public interface MenuService {
+// @GetMapping("/menu/userMenus")
+// List userMenus();
+//}
diff --git a/clouddo-zuul/src/main/resources/application.yml b/clouddo-zuul/src/main/resources/application.yml
index 0fc581055fa0f887224e22ceee879a33acc2ea36..e72dc6ca3b1096236c69ecc29e19264f0204731b 100644
--- a/clouddo-zuul/src/main/resources/application.yml
+++ b/clouddo-zuul/src/main/resources/application.yml
@@ -14,6 +14,15 @@ spring:
ribbon:
ReadTimeout: 60000
ConnectTimeout: 60000
+security:
+ oauth2:
+ client:
+ access-token-uri: http://localhost:8005/oauth/token
+ user-authorization-uri: http://localhost:8005/oauth/authorize
+ client-id: app
+ resource:
+ user-info-uri: http://localhost:8005/user
+ prefer-token-info: false
diff --git a/clouddo-zuul/src/test/java/com/bootdo/clouddozuul/ClouddoZuulApplicationTests.java b/clouddo-zuul/src/test/java/com/bootdo/clouddozuul/ClouddoZuulApplicationTests.java
index 412832283206f88e41fa64aa9e669f21752bc778..b1693ca74f0d9f1780e9e67132fdf8aa96784687 100644
--- a/clouddo-zuul/src/test/java/com/bootdo/clouddozuul/ClouddoZuulApplicationTests.java
+++ b/clouddo-zuul/src/test/java/com/bootdo/clouddozuul/ClouddoZuulApplicationTests.java
@@ -1,21 +1,21 @@
-package com.bootdo.clouddozuul;
-
-import com.bootdo.clouddozuul.prc.admin.MenuService;
-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.SpringRunner;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class ClouddoZuulApplicationTests {
- @Autowired
- MenuService menuService;
-
- @Test
- public void contextLoads() {
- menuService.userMenus();
- }
-
-}
+//package com.bootdo.clouddozuul;
+//
+//import com.bootdo.clouddozuul.prc.admin.MenuService;
+//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.SpringRunner;
+//
+//@RunWith(SpringRunner.class)
+//@SpringBootTest
+//public class ClouddoZuulApplicationTests {
+// @Autowired
+// MenuService menuService;
+//
+// @Test
+// public void contextLoads() {
+// menuService.userMenus();
+// }
+//
+//}