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 authorities) { + super(username, password, authorities); + setId(id); + } + public CurrentUser(String username, String password, Long id,String name, Collection 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(); +// } +// +//}