Auth2.0之JWT篇

一、前言

        前面讲了一篇关于auth2.0入门博客,实际上在使用中,用得不是很多,因为被调用的了系统在接收到请求的时候,都需要把传入的access_token拿到认证中心去校验一下合法性,如果合法的话,则允许调用,反之将拒绝访问,这样子的架构方式会拖慢整个系统的响应速度。为了避免这个频繁的校验过程,现在常用的是Auth2结合jwt的方式,它的优点就是在消费方请求的时候,去认证中心获得一个access_token,这个token遵守一定的结构,而下游的服务接收到请求的时候,只需要把这个token里面的内容解析出来,就可以了,因为这个token里面就包含了你想要的信息。

 

二、准备阶段

      要想成功实现基于JWT的Auth2.0,需要使用公私钥的加解密的访问方式。

      私钥生成方法:

     进入你的jdk的bin目录下,执行以下命令

keytool -genkeypair -alias <你取的别名> -validity <天数>  -keyalg RSA -dname "CN=jwt,OU=jtw,O=jwt,L=zurich,S=zurich, C=CH" -keypass 私钥密码 -keystore <私钥文件名> -storepass <私钥密码>

     执行完成后,会生成一个文件。我自己生成的文件名称为micro-jwt.jks

    

     公钥生成方法:
     还在你的jdk的bin目录下,执行以下命令

keytool -list -rfc --keystore <你的私钥文件全路径> | openssl x509 -inform pem -pubkey

      执行完成后,会生成一个文件,public.cert

 

     将生成的私钥放入到认证中心的resources目录下,公钥放到你的除了认证中心外的每个工程下的resources目录下即可。

二、工程结构

     1、工程总体结构如下

    2、认证中心模块结构

       

      OAuth2Config类的内容如下

package com.hl.config;

import com.hl.service.UserServiceDetail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.security.authentication.AuthenticationManager;
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.ClientDetailsService;
import org.springframework.security.oauth2.provider.client.JdbcClientDetailsService;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
import org.springframework.security.oauth2.provider.token.store.KeyStoreKeyFactory;

import javax.sql.DataSource;


@Configuration
@EnableAuthorizationServer
public class OAuth2Config extends AuthorizationServerConfigurerAdapter {

    @Autowired
    @Qualifier("authenticationManagerBean")
    private AuthenticationManager authenticationManager;

    @Autowired
    private UserServiceDetail userServiceDetail;

    @Autowired
    private DataSource dataSource;

/*    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        // 将客户端的信息存储在内存中
        clients.inMemory()
                // 配置一个客户端
                .withClient("micro-order")
                .secret("123456")
                // 配置客户端的域
                .scopes("service")
                // 配置验证类型为refresh_token和password
                .authorizedGrantTypes("refresh_token", "password")
                // 配置token的过期时间为1h
                .accessTokenValiditySeconds(30);
    }*/

    @Bean // 声明 ClientDetails实现
    public ClientDetailsService clientDetailsService() {
        // 采用jdbc的方式存储相关数据
        return new JdbcClientDetailsService(dataSource);
    }


    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.withClientDetails(clientDetailsService());
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        // 配置token的存储方式为JwtTokenStore
        endpoints.tokenStore(tokenStore())
                // 配置用于JWT私钥加密的增强器
                .tokenEnhancer(jwtTokenEnhancer())
                // 配置安全认证管理,它实际上管理的是一系列的过滤器
                .authenticationManager(authenticationManager)
                .userDetailsService(userServiceDetail);
    }

    @Bean
    public TokenStore tokenStore() {
        return new JwtTokenStore(jwtTokenEnhancer());
    }

    //  这个bean很重要,最后对token进行加密就是靠它
    @Bean
    protected JwtAccessTokenConverter jwtTokenEnhancer() {
        // 配置jks文件,这个文件放在resources下,其中"123456"指的是在生成这个证书的时候,设置的密码
        KeyStoreKeyFactory keyStoreKeyFactory = new KeyStoreKeyFactory(new ClassPathResource("micro-jwt.jks"), "123456".toCharArray());
        JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setKeyPair(keyStoreKeyFactory.getKeyPair("micro-jwt")); // 注意,这个key是创建证书的时候,取的别名
        return converter;
    }

    @Override
    public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
        // 对获取Token的请求不再拦截
        oauthServer.tokenKeyAccess("permitAll()")
                // 验证获取Token的验证信息
                .checkTokenAccess("isAuthenticated()");
    }
}

     WebSecurityConfig类的内容如下

package com.hl.config;

import com.hl.service.UserServiceDetail;
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.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.NoOpPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserServiceDetail userServiceDetail;

    @Override
    public @Bean
    AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    /*
    *   access(String) 如果给定的SpEL表达式计算结果为true,就允许访问
        anonymous() 允许匿名用户访问
        authenticated() 允许认证的用户进行访问
        denyAll() 无条件拒绝所有访问
        fullyAuthenticated() 如果用户是完整认证的话(不是通过Remember-me功能认证的),就允许访问
        hasAuthority(String) 如果用户具备给定权限的话就允许访问
        hasAnyAuthority(String…)如果用户具备给定权限中的某一个的话,就允许访问
        hasRole(String) 如果用户具备给定角色(用户组)的话,就允许访问/
        hasAnyRole(String…) 如果用户具有给定角色(用户组)中的一个的话,允许访问.
        hasIpAddress(String 如果请求来自给定ip地址的话,就允许访问.
        not() 对其他访问结果求反.
        permitAll() 无条件允许访问
        rememberMe() 如果用户是通过Remember-me功能认证的,就允许访问
    *
    * */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();//关闭CSRF
//                .exceptionHandling()
//                .authenticationEntryPoint((request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED))
//                .and()
//                .authorizeRequests()
//                .antMatchers("/oauth/**").permitAll()
                .antMatchers("/**").authenticated()
//                .and()
//                .httpBasic();
        http.requestMatchers().anyRequest()
                .and()
                .authorizeRequests()
                .antMatchers("/oauth/**").permitAll();
    }

    @Bean
    PasswordEncoder passwordEncoder() {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }

    @Bean
    public static NoOpPasswordEncoder noOpPasswordEncoder() {
        return (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userServiceDetail).passwordEncoder(passwordEncoder());
    }
}

     UserServiceDetail类的内容如下

package com.hl.service;

import com.hl.dao.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;

@Service
public class UserServiceDetail implements UserDetailsService {
    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        return userRepository.findByUsername(username);
    }
}

    applicationContext.properties文件内容如下

spring.application.name=Auth-Center
server.port=3040

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/auth2.0-db?serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root

logging.level.org.springframework.security=debug

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

security.basic.enabled=true
spring.security.user.name=admin
spring.security.user.password=admin

spring.main.allow-bean-definition-overriding=true

    sql语句脚本如下

/*
Navicat MySQL Data Transfer

Source Server         : 本机数据库
Source Server Version : 50610
Source Host           : localhost:3306
Source Database       : auth2.0-db

Target Server Type    : MYSQL
Target Server Version : 50610
File Encoding         : 65001

Date: 2020-03-20 12:34:10
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for clientdetails
-- ----------------------------
DROP TABLE IF EXISTS `clientdetails`;
CREATE TABLE `clientdetails` (
  `appId` varchar(128) NOT NULL,
  `resourceIds` varchar(128) DEFAULT NULL,
  `appSecret` varchar(128) DEFAULT NULL,
  `scope` varchar(128) DEFAULT NULL,
  `grantTypes` varchar(128) DEFAULT NULL,
  `redirectUrl` varchar(128) DEFAULT NULL,
  `authorities` varchar(128) DEFAULT NULL,
  `access_token_validity` int(11) DEFAULT NULL,
  `refresh_token_validity` int(11) DEFAULT NULL,
  `additionalInformation` varchar(4096) DEFAULT NULL,
  `autoApproveScopes` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`appId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of clientdetails
-- ----------------------------

-- ----------------------------
-- Table structure for oauth_access_token
-- ----------------------------
DROP TABLE IF EXISTS `oauth_access_token`;
CREATE TABLE `oauth_access_token` (
  `token_id` varchar(128) DEFAULT NULL,
  `token` blob,
  `authentication_id` varchar(128) NOT NULL,
  `user_name` varchar(128) DEFAULT NULL,
  `client_id` varchar(128) DEFAULT NULL,
  `authentication` blob,
  `refresh_token` varchar(128) DEFAULT NULL,
  PRIMARY KEY (`authentication_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of oauth_access_token
-- ----------------------------
INSERT INTO `oauth_access_token` VALUES ('58ac80b0bd6d1632072850007906b1d2', 0xACED0005737200436F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F4175746832416363657373546F6B656E0CB29E361B24FACE0200064C00156164646974696F6E616C496E666F726D6174696F6E74000F4C6A6176612F7574696C2F4D61703B4C000A65787069726174696F6E7400104C6A6176612F7574696C2F446174653B4C000C72656672657368546F6B656E74003F4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F636F6D6D6F6E2F4F417574683252656672657368546F6B656E3B4C000573636F706574000F4C6A6176612F7574696C2F5365743B4C0009746F6B656E547970657400124C6A6176612F6C616E672F537472696E673B4C000576616C756571007E000578707372001E6A6176612E7574696C2E436F6C6C656374696F6E7324456D7074794D6170593614855ADCE7D002000078707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000170F63AD1AF787372004C6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744578706972696E674F417574683252656672657368546F6B656E2FDF47639DD0C9B70200014C000A65787069726174696F6E71007E0002787200446F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F417574683252656672657368546F6B656E73E10E0A6354D45E0200014C000576616C756571007E0005787074002466633038643839622D393335392D343935342D383335352D3333333939633932306166307371007E0009770800000170F63F658E78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C0001637400164C6A6176612F7574696C2F436F6C6C656374696F6E3B7870737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000103F40000000000001740003616C6C7874000662656172657274002464613462353464652D646630322D343363392D623937662D346434363034663862393032, 'd68a31f8612ea056c609f2c8ac6dd8e8', 'james', 'pc', 0xACED0005737200416F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F417574683241757468656E7469636174696F6EBD400B02166252130200024C000D73746F7265645265717565737474003C4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F4F4175746832526571756573743B4C00127573657241757468656E7469636174696F6E7400324C6F72672F737072696E676672616D65776F726B2F73656375726974792F636F72652F41757468656E7469636174696F6E3B787200476F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E416273747261637441757468656E7469636174696F6E546F6B656ED3AA287E6E47640E0200035A000D61757468656E746963617465644C000B617574686F7269746965737400164C6A6176612F7574696C2F436F6C6C656374696F6E3B4C000764657461696C737400124C6A6176612F6C616E672F4F626A6563743B787000737200266A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654C697374FC0F2531B5EC8E100200014C00046C6973747400104C6A6176612F7574696C2F4C6973743B7872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C00016371007E00047870737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E526F6C658AC42645B8543F7B0200024C000269647400104C6A6176612F6C616E672F4C6F6E673B4C00046E616D657400124C6A6176612F6C616E672F537472696E673B78707372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000000000000174000A524F4C455F41444D494E7871007E000C707372003A6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F41757468325265717565737400000000000000010200075A0008617070726F7665644C000B617574686F72697469657371007E00044C000A657874656E73696F6E7374000F4C6A6176612F7574696C2F4D61703B4C000B726564697265637455726971007E000F4C00077265667265736874003B4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F546F6B656E526571756573743B4C000B7265736F7572636549647374000F4C6A6176612F7574696C2F5365743B4C000D726573706F6E7365547970657371007E0018787200386F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E426173655265717565737436287A3EA37169BD0200034C0008636C69656E74496471007E000F4C001172657175657374506172616D657465727371007E00164C000573636F706571007E001878707400027063737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654D6170F1A5A8FE74F507420200014C00016D71007E00167870737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F400000000000067708000000080000000574000D726573706F6E73655F74797065740004636F646574000C72656469726563745F757269740024687474703A2F2F6C6F63616C686F73743A383038332F6C6F67696E2F63616C6C6261636B740004636F646574000664644358536374000A6772616E745F74797065740012617574686F72697A6174696F6E5F636F6465740009636C69656E745F696471007E001B78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007871007E0009737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000103F40000000000001740003616C6C78017371007E002C770C000000103F40000000000001737200426F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E617574686F726974792E53696D706C654772616E746564417574686F7269747900000000000001F40200014C0004726F6C6571007E000F78707400066F6175746832787371007E001E3F400000000000007708000000100000000078740024687474703A2F2F6C6F63616C686F73743A383038332F6C6F67696E2F63616C6C6261636B707371007E002C770C000000103F40000000000000787371007E002C770C000000103F4000000000000171007E0021787372004F6F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E557365726E616D6550617373776F726441757468656E7469636174696F6E546F6B656E00000000000001F40200024C000B63726564656E7469616C7371007E00054C00097072696E636970616C71007E00057871007E0003017371007E00077371007E000B0000000177040000000171007E00107871007E003A737200486F72672E737072696E676672616D65776F726B2E73656375726974792E7765622E61757468656E7469636174696F6E2E57656241757468656E7469636174696F6E44657461696C7300000000000001F40200024C000D72656D6F74654164647265737371007E000F4C000973657373696F6E496471007E000F787074000C3139322E3136382E312E323070707372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E55736572A02188F96E888EE60200044C000B617574686F72697469657371007E00084C0002696471007E000E4C000870617373776F726471007E000F4C0008757365726E616D6571007E000F78707372002F6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E50657273697374656E744261676563FD3F2082000C0200014C000362616771007E00087872003E6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E416273747261637450657273697374656E74436F6C6C656374696F6EE9D3DC4DA9113BA502000A5A001B616C6C6F774C6F61644F7574736964655472616E73616374696F6E49000A63616368656453697A655A000564697274795A000B696E697469616C697A65645A000D697354656D7053657373696F6E4C00036B65797400164C6A6176612F696F2F53657269616C697A61626C653B4C00056F776E657271007E00054C0004726F6C6571007E000F4C001273657373696F6E466163746F72795575696471007E000F4C000E73746F726564536E617073686F7471007E0042787000FFFFFFFF0001007371007E0011000000000000000871007E003F740027636F6D2E7869616E677875652E6A61636B2E6265616E2E557365722E617574686F726974696573707371007E000B0000000177040000000171007E0010787371007E000B0000000177040000000171007E00107871007E00447400447B6263727970747D243261243130244F58706A78627751475554437468586B6F624F50664F4F6F766971654B68424668615959716A56505A377354564177384A787463757400056A616D6573, '02b52302680407812b1baff502cbbfe3');
INSERT INTO `oauth_access_token` VALUES ('2e536c5e285c0e97a6ae41d5f1991dc3', 0xACED0005737200436F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F4175746832416363657373546F6B656E0CB29E361B24FACE0200064C00156164646974696F6E616C496E666F726D6174696F6E74000F4C6A6176612F7574696C2F4D61703B4C000A65787069726174696F6E7400104C6A6176612F7574696C2F446174653B4C000C72656672657368546F6B656E74003F4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F636F6D6D6F6E2F4F417574683252656672657368546F6B656E3B4C000573636F706574000F4C6A6176612F7574696C2F5365743B4C0009746F6B656E547970657400124C6A6176612F6C616E672F537472696E673B4C000576616C756571007E000578707372001E6A6176612E7574696C2E436F6C6C656374696F6E7324456D7074794D6170593614855ADCE7D002000078707372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000170F1C75B5A787372004C6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744578706972696E674F417574683252656672657368546F6B656E2FDF47639DD0C9B70200014C000A65787069726174696F6E71007E0002787200446F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F417574683252656672657368546F6B656E73E10E0A6354D45E0200014C000576616C756571007E0005787074002464343764613730382D323261342D343039392D616538322D6162393831613038633463617371007E0009770800000170F1C6A5FA78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C0001637400164C6A6176612F7574696C2F436F6C6C656374696F6E3B7870737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000023F40000000000001740003616C6C7874000662656172657274002437653565643032642D643631652D346632312D386630352D643232623036313864313932, 'e1a03d88cd328a9f807556e0085cd31b', 'jack', 'pc', 0xACED0005737200416F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F417574683241757468656E7469636174696F6EBD400B02166252130200024C000D73746F7265645265717565737474003C4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F4F4175746832526571756573743B4C00127573657241757468656E7469636174696F6E7400324C6F72672F737072696E676672616D65776F726B2F73656375726974792F636F72652F41757468656E7469636174696F6E3B787200476F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E416273747261637441757468656E7469636174696F6E546F6B656ED3AA287E6E47640E0200035A000D61757468656E746963617465644C000B617574686F7269746965737400164C6A6176612F7574696C2F436F6C6C656374696F6E3B4C000764657461696C737400124C6A6176612F6C616E672F4F626A6563743B787000737200266A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654C697374FC0F2531B5EC8E100200014C00046C6973747400104C6A6176612F7574696C2F4C6973743B7872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C00016371007E00047870737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E526F6C658AC42645B8543F7B0200024C000269647400104C6A6176612F6C616E672F4C6F6E673B4C00046E616D657400124C6A6176612F6C616E672F537472696E673B78707372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000000000002740009524F4C455F4D454E557871007E000C707372003A6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F41757468325265717565737400000000000000010200075A0008617070726F7665644C000B617574686F72697469657371007E00044C000A657874656E73696F6E7374000F4C6A6176612F7574696C2F4D61703B4C000B726564697265637455726971007E000F4C00077265667265736874003B4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F546F6B656E526571756573743B4C000B7265736F7572636549647374000F4C6A6176612F7574696C2F5365743B4C000D726573706F6E7365547970657371007E0018787200386F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E426173655265717565737436287A3EA37169BD0200034C0008636C69656E74496471007E000F4C001172657175657374506172616D657465727371007E00164C000573636F706571007E001878707400027063737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654D6170F1A5A8FE74F507420200014C00016D71007E00167870737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F400000000000067708000000080000000574000D726573706F6E73655F74797065740004636F646574000C72656469726563745F757269740024687474703A2F2F6C6F63616C686F73743A383038332F6C6F67696E2F63616C6C6261636B740004636F646574000677765739517774000A6772616E745F74797065740012617574686F72697A6174696F6E5F636F6465740009636C69656E745F696471007E001B78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007871007E0009737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000103F40000000000001740003616C6C78017371007E002C770C000000103F40000000000001737200426F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E617574686F726974792E53696D706C654772616E746564417574686F7269747900000000000001F40200014C0004726F6C6571007E000F78707400066F6175746832787371007E001E3F400000000000007708000000100000000078740024687474703A2F2F6C6F63616C686F73743A383038332F6C6F67696E2F63616C6C6261636B707371007E002C770C000000103F40000000000000787371007E002C770C000000103F4000000000000171007E0021787372004F6F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E557365726E616D6550617373776F726441757468656E7469636174696F6E546F6B656E00000000000001F40200024C000B63726564656E7469616C7371007E00054C00097072696E636970616C71007E00057871007E0003017371007E00077371007E000B0000000177040000000171007E00107871007E003A737200486F72672E737072696E676672616D65776F726B2E73656375726974792E7765622E61757468656E7469636174696F6E2E57656241757468656E7469636174696F6E44657461696C7300000000000001F40200024C000D72656D6F74654164647265737371007E000F4C000973657373696F6E496471007E000F787074000F303A303A303A303A303A303A303A3170707372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E55736572A02188F96E888EE60200044C000B617574686F72697469657371007E00084C0002696471007E000E4C000870617373776F726471007E000F4C0008757365726E616D6571007E000F78707372002F6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E50657273697374656E744261676563FD3F2082000C0200014C000362616771007E00087872003E6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E416273747261637450657273697374656E74436F6C6C656374696F6EE9D3DC4DA9113BA502000A5A001B616C6C6F774C6F61644F7574736964655472616E73616374696F6E49000A63616368656453697A655A000564697274795A000B696E697469616C697A65645A000D697354656D7053657373696F6E4C00036B65797400164C6A6176612F696F2F53657269616C697A61626C653B4C00056F776E657271007E00054C0004726F6C6571007E000F4C001273657373696F6E466163746F72795575696471007E000F4C000E73746F726564536E617073686F7471007E0042787000FFFFFFFF0001007371007E0011000000000000000A71007E003F740027636F6D2E7869616E677875652E6A61636B2E6265616E2E557365722E617574686F726974696573707371007E000B0000000177040000000171007E0010787371007E000B0000000177040000000171007E00107871007E00447400447B6263727970747D243261243130244F58706A78627751475554437468586B6F624F50664F4F6F766971654B68424668615959716A56505A377354564177384A787463757400046A61636B, 'f970e1482be324489d34b884585ce5f7');

-- ----------------------------
-- Table structure for oauth_approvals
-- ----------------------------
DROP TABLE IF EXISTS `oauth_approvals`;
CREATE TABLE `oauth_approvals` (
  `userId` varchar(128) DEFAULT NULL,
  `clientId` varchar(128) DEFAULT NULL,
  `scope` varchar(128) DEFAULT NULL,
  `status` varchar(10) DEFAULT NULL,
  `expiresAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `lastModifiedAt` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) 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) COLLATE utf8_bin NOT NULL,
  `resource_ids` varchar(128) COLLATE utf8_bin DEFAULT NULL,
  `client_secret` varchar(128) COLLATE utf8_bin DEFAULT NULL,
  `scope` varchar(128) COLLATE utf8_bin DEFAULT NULL,
  `authorized_grant_types` varchar(128) COLLATE utf8_bin DEFAULT NULL,
  `web_server_redirect_uri` varchar(128) COLLATE utf8_bin DEFAULT NULL,
  `authorities` varchar(128) COLLATE utf8_bin DEFAULT NULL,
  `access_token_validity` int(11) DEFAULT NULL,
  `refresh_token_validity` int(11) DEFAULT NULL,
  `additional_information` varchar(4096) COLLATE utf8_bin DEFAULT NULL,
  `autoapprove` varchar(128) COLLATE utf8_bin DEFAULT NULL,
  PRIMARY KEY (`client_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ----------------------------
-- Records of oauth_client_details
-- ----------------------------
INSERT INTO `oauth_client_details` VALUES ('android', null, '{bcrypt}$2a$10$y.iyrX9c7lotqEqs4JF8ZuDfr06I.7Ryg7y7aUYFO.rqIhca32PBi', 'all', 'client_credentials,refresh_token', null, 'oauth2', null, null, null, 'true');
INSERT INTO `oauth_client_details` VALUES ('pc', null, '{bcrypt}$2a$10$y.iyrX9c7lotqEqs4JF8ZuDfr06I.7Ryg7y7aUYFO.rqIhca32PBi', 'all', 'password,refresh_token,client_credentials,authorization_code', null, 'oauth2', null, null, null, 'true');

-- ----------------------------
-- Table structure for oauth_client_token
-- ----------------------------
DROP TABLE IF EXISTS `oauth_client_token`;
CREATE TABLE `oauth_client_token` (
  `token_id` varchar(128) DEFAULT NULL,
  `token` blob,
  `authentication_id` varchar(128) NOT NULL,
  `user_name` varchar(128) DEFAULT NULL,
  `client_id` varchar(128) 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(128) 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(128) DEFAULT NULL,
  `token` blob,
  `authentication` blob
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of oauth_refresh_token
-- ----------------------------
INSERT INTO `oauth_refresh_token` VALUES ('44fa7bad258a40ccbf4fa8707ebb9e41', 0xACED00057372004C6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744578706972696E674F417574683252656672657368546F6B656E2FDF47639DD0C9B70200014C000A65787069726174696F6E7400104C6A6176612F7574696C2F446174653B787200446F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F417574683252656672657368546F6B656E73E10E0A6354D45E0200014C000576616C75657400124C6A6176612F6C616E672F537472696E673B787074002439653661356539362D333362372D343836392D613061382D3738383339646638373665637372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000170EE55103D78, 0xACED0005737200416F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F417574683241757468656E7469636174696F6EBD400B02166252130200024C000D73746F7265645265717565737474003C4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F4F4175746832526571756573743B4C00127573657241757468656E7469636174696F6E7400324C6F72672F737072696E676672616D65776F726B2F73656375726974792F636F72652F41757468656E7469636174696F6E3B787200476F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E416273747261637441757468656E7469636174696F6E546F6B656ED3AA287E6E47640E0200035A000D61757468656E746963617465644C000B617574686F7269746965737400164C6A6176612F7574696C2F436F6C6C656374696F6E3B4C000764657461696C737400124C6A6176612F6C616E672F4F626A6563743B787000737200266A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654C697374FC0F2531B5EC8E100200014C00046C6973747400104C6A6176612F7574696C2F4C6973743B7872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C00016371007E00047870737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E526F6C658AC42645B8543F7B0200024C000269647400104C6A6176612F6C616E672F4C6F6E673B4C00046E616D657400124C6A6176612F6C616E672F537472696E673B78707372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000000000002740009524F4C455F4D454E557871007E000C707372003A6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F41757468325265717565737400000000000000010200075A0008617070726F7665644C000B617574686F72697469657371007E00044C000A657874656E73696F6E7374000F4C6A6176612F7574696C2F4D61703B4C000B726564697265637455726971007E000F4C00077265667265736874003B4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F546F6B656E526571756573743B4C000B7265736F7572636549647374000F4C6A6176612F7574696C2F5365743B4C000D726573706F6E7365547970657371007E0018787200386F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E426173655265717565737436287A3EA37169BD0200034C0008636C69656E74496471007E000F4C001172657175657374506172616D657465727371007E00164C000573636F706571007E001878707400027063737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654D6170F1A5A8FE74F507420200014C00016D71007E00167870737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F400000000000067708000000080000000374000A6772616E745F7479706574000870617373776F7264740008757365726E616D657400046A61636B74000573636F7065740003616C6C78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007871007E0009737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000103F4000000000000171007E002578017371007E0029770C000000103F40000000000001737200426F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E617574686F726974792E53696D706C654772616E746564417574686F7269747900000000000002080200014C0004726F6C6571007E000F78707400056175746832787371007E001E3F40000000000000770800000010000000007870707371007E0029770C000000103F40000000000000787371007E0029770C000000103F40000000000000787372004F6F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E557365726E616D6550617373776F726441757468656E7469636174696F6E546F6B656E00000000000002080200024C000B63726564656E7469616C7371007E00054C00097072696E636970616C71007E00057871007E0003017371007E00077371007E000B0000000177040000000171007E00107871007E0035737200176A6176612E7574696C2E4C696E6B6564486173684D617034C04E5C106CC0FB0200015A000B6163636573734F726465727871007E001E3F400000000000067708000000080000000371007E002071007E002171007E002271007E002371007E002471007E00257800707372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E55736572A02188F96E888EE60200044C000B617574686F72697469657371007E00084C0002696471007E000E4C000870617373776F726471007E000F4C0008757365726E616D6571007E000F78707372002F6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E50657273697374656E74426167FE57C5AFDA4FA6440200024C000362616771007E00084C001270726F7669646564436F6C6C656374696F6E71007E00047872003E6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E416273747261637450657273697374656E74436F6C6C656374696F6E5718B75D8ABA735402000B5A001B616C6C6F774C6F61644F7574736964655472616E73616374696F6E49000A63616368656453697A655A000564697274795A000E656C656D656E7452656D6F7665645A000B696E697469616C697A65645A000D697354656D7053657373696F6E4C00036B65797400164C6A6176612F696F2F53657269616C697A61626C653B4C00056F776E657271007E00054C0004726F6C6571007E000F4C001273657373696F6E466163746F72795575696471007E000F4C000E73746F726564536E617073686F7471007E003C787000FFFFFFFF000001007371007E0011000000000000000A71007E0039740027636F6D2E7869616E677875652E6A61636B2E6265616E2E557365722E617574686F726974696573707371007E000B0000000177040000000171007E0010787371007E000B0000000177040000000171007E0010787071007E003E7400447B6263727970747D243261243130244F58706A78627751475554437468586B6F624F50664F4F6F766971654B68424668615959716A56505A377354564177384A787463757400046A61636B);
INSERT INTO `oauth_refresh_token` VALUES ('a44b8f645e3d1b82670ed66ab0aa8936', 0xACED00057372004C6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744578706972696E674F417574683252656672657368546F6B656E2FDF47639DD0C9B70200014C000A65787069726174696F6E7400104C6A6176612F7574696C2F446174653B787200446F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F417574683252656672657368546F6B656E73E10E0A6354D45E0200014C000576616C75657400124C6A6176612F6C616E672F537472696E673B787074002431323635383733312D663333332D346561612D383362312D6361383733313263656531617372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000170F168FA1478, 0xACED0005737200416F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F417574683241757468656E7469636174696F6EBD400B02166252130200024C000D73746F7265645265717565737474003C4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F4F4175746832526571756573743B4C00127573657241757468656E7469636174696F6E7400324C6F72672F737072696E676672616D65776F726B2F73656375726974792F636F72652F41757468656E7469636174696F6E3B787200476F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E416273747261637441757468656E7469636174696F6E546F6B656ED3AA287E6E47640E0200035A000D61757468656E746963617465644C000B617574686F7269746965737400164C6A6176612F7574696C2F436F6C6C656374696F6E3B4C000764657461696C737400124C6A6176612F6C616E672F4F626A6563743B787000737200266A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654C697374FC0F2531B5EC8E100200014C00046C6973747400104C6A6176612F7574696C2F4C6973743B7872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C00016371007E00047870737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E526F6C658AC42645B8543F7B0200024C000269647400104C6A6176612F6C616E672F4C6F6E673B4C00046E616D657400124C6A6176612F6C616E672F537472696E673B78707372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000000000000174000A524F4C455F41444D494E7871007E000C707372003A6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F41757468325265717565737400000000000000010200075A0008617070726F7665644C000B617574686F72697469657371007E00044C000A657874656E73696F6E7374000F4C6A6176612F7574696C2F4D61703B4C000B726564697265637455726971007E000F4C00077265667265736874003B4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F546F6B656E526571756573743B4C000B7265736F7572636549647374000F4C6A6176612F7574696C2F5365743B4C000D726573706F6E7365547970657371007E0018787200386F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E426173655265717565737436287A3EA37169BD0200034C0008636C69656E74496471007E000F4C001172657175657374506172616D657465727371007E00164C000573636F706571007E001878707400027063737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654D6170F1A5A8FE74F507420200014C00016D71007E00167870737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F400000000000067708000000080000000374000A6772616E745F7479706574000870617373776F7264740008757365726E616D657400056A616D657374000573636F7065740003616C6C78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007871007E0009737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000103F4000000000000171007E002578017371007E0029770C000000103F40000000000001737200426F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E617574686F726974792E53696D706C654772616E746564417574686F7269747900000000000002080200014C0004726F6C6571007E000F78707400066F6175746832787371007E001E3F40000000000000770800000010000000007870707371007E0029770C000000103F40000000000000787371007E0029770C000000103F40000000000000787372004F6F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E557365726E616D6550617373776F726441757468656E7469636174696F6E546F6B656E00000000000002080200024C000B63726564656E7469616C7371007E00054C00097072696E636970616C71007E00057871007E0003017371007E00077371007E000B0000000177040000000171007E00107871007E0035737200176A6176612E7574696C2E4C696E6B6564486173684D617034C04E5C106CC0FB0200015A000B6163636573734F726465727871007E001E3F400000000000067708000000080000000371007E002071007E002171007E002271007E002371007E002471007E00257800707372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E55736572A02188F96E888EE60200044C000B617574686F72697469657371007E00084C0002696471007E000E4C000870617373776F726471007E000F4C0008757365726E616D6571007E000F78707372002F6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E50657273697374656E74426167FE57C5AFDA4FA6440200024C000362616771007E00084C001270726F7669646564436F6C6C656374696F6E71007E00047872003E6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E416273747261637450657273697374656E74436F6C6C656374696F6E5718B75D8ABA735402000B5A001B616C6C6F774C6F61644F7574736964655472616E73616374696F6E49000A63616368656453697A655A000564697274795A000E656C656D656E7452656D6F7665645A000B696E697469616C697A65645A000D697354656D7053657373696F6E4C00036B65797400164C6A6176612F696F2F53657269616C697A61626C653B4C00056F776E657271007E00054C0004726F6C6571007E000F4C001273657373696F6E466163746F72795575696471007E000F4C000E73746F726564536E617073686F7471007E003C787000FFFFFFFF000001007371007E0011000000000000000871007E0039740027636F6D2E7869616E677875652E6A61636B2E6265616E2E557365722E617574686F726974696573707371007E000B0000000177040000000171007E0010787371007E000B0000000177040000000171007E0010787071007E003E7400447B6263727970747D243261243130244F58706A78627751475554437468586B6F624F50664F4F6F766971654B68424668615959716A56505A377354564177384A787463757400056A616D6573);
INSERT INTO `oauth_refresh_token` VALUES ('f970e1482be324489d34b884585ce5f7', 0xACED00057372004C6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744578706972696E674F417574683252656672657368546F6B656E2FDF47639DD0C9B70200014C000A65787069726174696F6E7400104C6A6176612F7574696C2F446174653B787200446F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F417574683252656672657368546F6B656E73E10E0A6354D45E0200014C000576616C75657400124C6A6176612F6C616E672F537472696E673B787074002464343764613730382D323261342D343039392D616538322D6162393831613038633463617372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000170F1C6A5FA78, 0xACED0005737200416F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F417574683241757468656E7469636174696F6EBD400B02166252130200024C000D73746F7265645265717565737474003C4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F4F4175746832526571756573743B4C00127573657241757468656E7469636174696F6E7400324C6F72672F737072696E676672616D65776F726B2F73656375726974792F636F72652F41757468656E7469636174696F6E3B787200476F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E416273747261637441757468656E7469636174696F6E546F6B656ED3AA287E6E47640E0200035A000D61757468656E746963617465644C000B617574686F7269746965737400164C6A6176612F7574696C2F436F6C6C656374696F6E3B4C000764657461696C737400124C6A6176612F6C616E672F4F626A6563743B787000737200266A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654C697374FC0F2531B5EC8E100200014C00046C6973747400104C6A6176612F7574696C2F4C6973743B7872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C00016371007E00047870737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E526F6C658AC42645B8543F7B0200024C000269647400104C6A6176612F6C616E672F4C6F6E673B4C00046E616D657400124C6A6176612F6C616E672F537472696E673B78707372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B02000078700000000000000002740009524F4C455F4D454E557871007E000C707372003A6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F41757468325265717565737400000000000000010200075A0008617070726F7665644C000B617574686F72697469657371007E00044C000A657874656E73696F6E7374000F4C6A6176612F7574696C2F4D61703B4C000B726564697265637455726971007E000F4C00077265667265736874003B4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F546F6B656E526571756573743B4C000B7265736F7572636549647374000F4C6A6176612F7574696C2F5365743B4C000D726573706F6E7365547970657371007E0018787200386F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E426173655265717565737436287A3EA37169BD0200034C0008636C69656E74496471007E000F4C001172657175657374506172616D657465727371007E00164C000573636F706571007E001878707400027063737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654D6170F1A5A8FE74F507420200014C00016D71007E00167870737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F400000000000067708000000080000000574000D726573706F6E73655F74797065740004636F646574000C72656469726563745F757269740024687474703A2F2F6C6F63616C686F73743A383038332F6C6F67696E2F63616C6C6261636B740004636F646574000678374D7A725474000A6772616E745F74797065740012617574686F72697A6174696F6E5F636F6465740009636C69656E745F696471007E001B78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007871007E0009737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000103F40000000000001740003616C6C78017371007E002C770C000000103F40000000000001737200426F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E617574686F726974792E53696D706C654772616E746564417574686F7269747900000000000001F40200014C0004726F6C6571007E000F78707400066F6175746832787371007E001E3F400000000000007708000000100000000078740024687474703A2F2F6C6F63616C686F73743A383038332F6C6F67696E2F63616C6C6261636B707371007E002C770C000000103F40000000000000787371007E002C770C000000103F4000000000000171007E0021787372004F6F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E557365726E616D6550617373776F726441757468656E7469636174696F6E546F6B656E00000000000001F40200024C000B63726564656E7469616C7371007E00054C00097072696E636970616C71007E00057871007E0003017371007E00077371007E000B0000000177040000000171007E00107871007E003A737200486F72672E737072696E676672616D65776F726B2E73656375726974792E7765622E61757468656E7469636174696F6E2E57656241757468656E7469636174696F6E44657461696C7300000000000001F40200024C000D72656D6F74654164647265737371007E000F4C000973657373696F6E496471007E000F787074000F303A303A303A303A303A303A303A3170707372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E55736572A02188F96E888EE60200044C000B617574686F72697469657371007E00084C0002696471007E000E4C000870617373776F726471007E000F4C0008757365726E616D6571007E000F78707372002F6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E50657273697374656E744261676563FD3F2082000C0200014C000362616771007E00087872003E6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E416273747261637450657273697374656E74436F6C6C656374696F6EE9D3DC4DA9113BA502000A5A001B616C6C6F774C6F61644F7574736964655472616E73616374696F6E49000A63616368656453697A655A000564697274795A000B696E697469616C697A65645A000D697354656D7053657373696F6E4C00036B65797400164C6A6176612F696F2F53657269616C697A61626C653B4C00056F776E657271007E00054C0004726F6C6571007E000F4C001273657373696F6E466163746F72795575696471007E000F4C000E73746F726564536E617073686F7471007E0042787000FFFFFFFF0001007371007E0011000000000000000A71007E003F740027636F6D2E7869616E677875652E6A61636B2E6265616E2E557365722E617574686F726974696573707371007E000B0000000177040000000171007E0010787371007E000B0000000177040000000171007E00107871007E00447400447B6263727970747D243261243130244F58706A78627751475554437468586B6F624F50664F4F6F766971654B68424668615959716A56505A377354564177384A787463757400046A61636B);
INSERT INTO `oauth_refresh_token` VALUES ('f98371b4755a6576fbbe969550c88ef9', 0xACED00057372004C6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744578706972696E674F417574683252656672657368546F6B656E2FDF47639DD0C9B70200014C000A65787069726174696F6E7400104C6A6176612F7574696C2F446174653B787200446F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F417574683252656672657368546F6B656E73E10E0A6354D45E0200014C000576616C75657400124C6A6176612F6C616E672F537472696E673B787074002430623561613637372D333035662D346431662D616161312D3965373862613961643534387372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000170F1E761E778, 0xACED0005737200416F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F417574683241757468656E7469636174696F6EBD400B02166252130200024C000D73746F7265645265717565737474003C4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F4F4175746832526571756573743B4C00127573657241757468656E7469636174696F6E7400324C6F72672F737072696E676672616D65776F726B2F73656375726974792F636F72652F41757468656E7469636174696F6E3B787200476F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E416273747261637441757468656E7469636174696F6E546F6B656ED3AA287E6E47640E0200035A000D61757468656E746963617465644C000B617574686F7269746965737400164C6A6176612F7574696C2F436F6C6C656374696F6E3B4C000764657461696C737400124C6A6176612F6C616E672F4F626A6563743B787000737200266A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654C697374FC0F2531B5EC8E100200014C00046C6973747400104C6A6176612F7574696C2F4C6973743B7872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C00016371007E00047870737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E526F6C658AC42645B8543F7B0200024C000269647400104C6A6176612F6C616E672F4C6F6E673B4C00046E616D657400124C6A6176612F6C616E672F537472696E673B78707372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000000000000174000A524F4C455F41444D494E7871007E000C707372003A6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F41757468325265717565737400000000000000010200075A0008617070726F7665644C000B617574686F72697469657371007E00044C000A657874656E73696F6E7374000F4C6A6176612F7574696C2F4D61703B4C000B726564697265637455726971007E000F4C00077265667265736874003B4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F546F6B656E526571756573743B4C000B7265736F7572636549647374000F4C6A6176612F7574696C2F5365743B4C000D726573706F6E7365547970657371007E0018787200386F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E426173655265717565737436287A3EA37169BD0200034C0008636C69656E74496471007E000F4C001172657175657374506172616D657465727371007E00164C000573636F706571007E001878707400027063737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654D6170F1A5A8FE74F507420200014C00016D71007E00167870737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F400000000000067708000000080000000574000D726573706F6E73655F74797065740004636F646574000C72656469726563745F757269740024687474703A2F2F6C6F63616C686F73743A383038332F6C6F67696E2F63616C6C6261636B740004636F646574000652726D71763474000A6772616E745F74797065740012617574686F72697A6174696F6E5F636F6465740009636C69656E745F696471007E001B78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007871007E0009737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000103F40000000000001740003616C6C78017371007E002C770C000000103F40000000000001737200426F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E617574686F726974792E53696D706C654772616E746564417574686F7269747900000000000001F40200014C0004726F6C6571007E000F78707400066F6175746832787371007E001E3F400000000000007708000000100000000078740024687474703A2F2F6C6F63616C686F73743A383038332F6C6F67696E2F63616C6C6261636B707371007E002C770C000000103F40000000000000787371007E002C770C000000103F4000000000000171007E0021787372004F6F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E557365726E616D6550617373776F726441757468656E7469636174696F6E546F6B656E00000000000001F40200024C000B63726564656E7469616C7371007E00054C00097072696E636970616C71007E00057871007E0003017371007E00077371007E000B0000000177040000000171007E00107871007E003A737200486F72672E737072696E676672616D65776F726B2E73656375726974792E7765622E61757468656E7469636174696F6E2E57656241757468656E7469636174696F6E44657461696C7300000000000001F40200024C000D72656D6F74654164647265737371007E000F4C000973657373696F6E496471007E000F787074000F303A303A303A303A303A303A303A3170707372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E55736572A02188F96E888EE60200044C000B617574686F72697469657371007E00084C0002696471007E000E4C000870617373776F726471007E000F4C0008757365726E616D6571007E000F78707372002F6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E50657273697374656E744261676563FD3F2082000C0200014C000362616771007E00087872003E6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E416273747261637450657273697374656E74436F6C6C656374696F6EE9D3DC4DA9113BA502000A5A001B616C6C6F774C6F61644F7574736964655472616E73616374696F6E49000A63616368656453697A655A000564697274795A000B696E697469616C697A65645A000D697354656D7053657373696F6E4C00036B65797400164C6A6176612F696F2F53657269616C697A61626C653B4C00056F776E657271007E00054C0004726F6C6571007E000F4C001273657373696F6E466163746F72795575696471007E000F4C000E73746F726564536E617073686F7471007E0042787000FFFFFFFF0001007371007E0011000000000000000871007E003F740027636F6D2E7869616E677875652E6A61636B2E6265616E2E557365722E617574686F726974696573707371007E000B0000000177040000000171007E0010787371007E000B0000000177040000000171007E00107871007E00447400447B6263727970747D243261243130244F58706A78627751475554437468586B6F624F50664F4F6F766971654B68424668615959716A56505A377354564177384A787463757400056A616D6573);
INSERT INTO `oauth_refresh_token` VALUES ('02b52302680407812b1baff502cbbfe3', 0xACED00057372004C6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744578706972696E674F417574683252656672657368546F6B656E2FDF47639DD0C9B70200014C000A65787069726174696F6E7400104C6A6176612F7574696C2F446174653B787200446F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E636F6D6D6F6E2E44656661756C744F417574683252656672657368546F6B656E73E10E0A6354D45E0200014C000576616C75657400124C6A6176612F6C616E672F537472696E673B787074002466633038643839622D393335392D343935342D383335352D3333333939633932306166307372000E6A6176612E7574696C2E44617465686A81014B5974190300007870770800000170F63F658E78, 0xACED0005737200416F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F417574683241757468656E7469636174696F6EBD400B02166252130200024C000D73746F7265645265717565737474003C4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F4F4175746832526571756573743B4C00127573657241757468656E7469636174696F6E7400324C6F72672F737072696E676672616D65776F726B2F73656375726974792F636F72652F41757468656E7469636174696F6E3B787200476F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E416273747261637441757468656E7469636174696F6E546F6B656ED3AA287E6E47640E0200035A000D61757468656E746963617465644C000B617574686F7269746965737400164C6A6176612F7574696C2F436F6C6C656374696F6E3B4C000764657461696C737400124C6A6176612F6C616E672F4F626A6563743B787000737200266A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654C697374FC0F2531B5EC8E100200014C00046C6973747400104C6A6176612F7574696C2F4C6973743B7872002C6A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65436F6C6C656374696F6E19420080CB5EF71E0200014C00016371007E00047870737200136A6176612E7574696C2E41727261794C6973747881D21D99C7619D03000149000473697A657870000000017704000000017372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E526F6C658AC42645B8543F7B0200024C000269647400104C6A6176612F6C616E672F4C6F6E673B4C00046E616D657400124C6A6176612F6C616E672F537472696E673B78707372000E6A6176612E6C616E672E4C6F6E673B8BE490CC8F23DF0200014A000576616C7565787200106A6176612E6C616E672E4E756D62657286AC951D0B94E08B0200007870000000000000000174000A524F4C455F41444D494E7871007E000C707372003A6F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E4F41757468325265717565737400000000000000010200075A0008617070726F7665644C000B617574686F72697469657371007E00044C000A657874656E73696F6E7374000F4C6A6176612F7574696C2F4D61703B4C000B726564697265637455726971007E000F4C00077265667265736874003B4C6F72672F737072696E676672616D65776F726B2F73656375726974792F6F61757468322F70726F76696465722F546F6B656E526571756573743B4C000B7265736F7572636549647374000F4C6A6176612F7574696C2F5365743B4C000D726573706F6E7365547970657371007E0018787200386F72672E737072696E676672616D65776F726B2E73656375726974792E6F61757468322E70726F76696465722E426173655265717565737436287A3EA37169BD0200034C0008636C69656E74496471007E000F4C001172657175657374506172616D657465727371007E00164C000573636F706571007E001878707400027063737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C654D6170F1A5A8FE74F507420200014C00016D71007E00167870737200116A6176612E7574696C2E486173684D61700507DAC1C31660D103000246000A6C6F6164466163746F724900097468726573686F6C6478703F400000000000067708000000080000000574000D726573706F6E73655F74797065740004636F646574000C72656469726563745F757269740024687474703A2F2F6C6F63616C686F73743A383038332F6C6F67696E2F63616C6C6261636B740004636F646574000664644358536374000A6772616E745F74797065740012617574686F72697A6174696F6E5F636F6465740009636C69656E745F696471007E001B78737200256A6176612E7574696C2E436F6C6C656374696F6E7324556E6D6F6469666961626C65536574801D92D18F9B80550200007871007E0009737200176A6176612E7574696C2E4C696E6B656448617368536574D86CD75A95DD2A1E020000787200116A6176612E7574696C2E48617368536574BA44859596B8B7340300007870770C000000103F40000000000001740003616C6C78017371007E002C770C000000103F40000000000001737200426F72672E737072696E676672616D65776F726B2E73656375726974792E636F72652E617574686F726974792E53696D706C654772616E746564417574686F7269747900000000000001F40200014C0004726F6C6571007E000F78707400066F6175746832787371007E001E3F400000000000007708000000100000000078740024687474703A2F2F6C6F63616C686F73743A383038332F6C6F67696E2F63616C6C6261636B707371007E002C770C000000103F40000000000000787371007E002C770C000000103F4000000000000171007E0021787372004F6F72672E737072696E676672616D65776F726B2E73656375726974792E61757468656E7469636174696F6E2E557365726E616D6550617373776F726441757468656E7469636174696F6E546F6B656E00000000000001F40200024C000B63726564656E7469616C7371007E00054C00097072696E636970616C71007E00057871007E0003017371007E00077371007E000B0000000177040000000171007E00107871007E003A737200486F72672E737072696E676672616D65776F726B2E73656375726974792E7765622E61757468656E7469636174696F6E2E57656241757468656E7469636174696F6E44657461696C7300000000000001F40200024C000D72656D6F74654164647265737371007E000F4C000973657373696F6E496471007E000F787074000C3139322E3136382E312E323070707372001B636F6D2E7869616E677875652E6A61636B2E6265616E2E55736572A02188F96E888EE60200044C000B617574686F72697469657371007E00084C0002696471007E000E4C000870617373776F726471007E000F4C0008757365726E616D6571007E000F78707372002F6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E50657273697374656E744261676563FD3F2082000C0200014C000362616771007E00087872003E6F72672E68696265726E6174652E636F6C6C656374696F6E2E696E7465726E616C2E416273747261637450657273697374656E74436F6C6C656374696F6EE9D3DC4DA9113BA502000A5A001B616C6C6F774C6F61644F7574736964655472616E73616374696F6E49000A63616368656453697A655A000564697274795A000B696E697469616C697A65645A000D697354656D7053657373696F6E4C00036B65797400164C6A6176612F696F2F53657269616C697A61626C653B4C00056F776E657271007E00054C0004726F6C6571007E000F4C001273657373696F6E466163746F72795575696471007E000F4C000E73746F726564536E617073686F7471007E0042787000FFFFFFFF0001007371007E0011000000000000000871007E003F740027636F6D2E7869616E677875652E6A61636B2E6265616E2E557365722E617574686F726974696573707371007E000B0000000177040000000171007E0010787371007E000B0000000177040000000171007E00107871007E00447400447B6263727970747D243261243130244F58706A78627751475554437468586B6F624F50664F4F6F766971654B68424668615959716A56505A377354564177384A787463757400056A616D6573);

-- ----------------------------
-- Table structure for role
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of role
-- ----------------------------
INSERT INTO `role` VALUES ('1', 'ROLE_ADMIN');
INSERT INTO `role` VALUES ('2', 'ROLE_MENU');

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `password` varchar(255) DEFAULT NULL,
  `username` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `UK_sb8bbouer5wak8vyiiy4pf2bx` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('8', '{bcrypt}$2a$10$OXpjxbwQGUTCthXkobOPfOOoviqeKhBFhaYYqjVPZ7sTVAw8Jxtcu', 'james');
INSERT INTO `user` VALUES ('9', '{bcrypt}$2a$10$BrlNiPFAYEBOF0ZoyoAH8OtpVMtAsxnRIoyn0BQbGj/VUWW9TdLuO', 'james1');
INSERT INTO `user` VALUES ('10', '{bcrypt}$2a$10$OXpjxbwQGUTCthXkobOPfOOoviqeKhBFhaYYqjVPZ7sTVAw8Jxtcu', 'jack');
INSERT INTO `user` VALUES ('13', '{bcrypt}$2a$10$YKJ4AeJeFdPy4JFFDeThK.mQWc1areHOwc1BBvArrnaPCRAXeYEby', 'lison');

-- ----------------------------
-- Table structure for user_role
-- ----------------------------
DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role` (
  `user_id` bigint(20) NOT NULL,
  `role_id` bigint(20) NOT NULL,
  KEY `FKa68196081fvovjhkek5m97n3y` (`role_id`),
  KEY `FK859n2jvi8ivhui0rl0esws6o` (`user_id`),
  CONSTRAINT `FK859n2jvi8ivhui0rl0esws6o` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`),
  CONSTRAINT `FKa68196081fvovjhkek5m97n3y` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

-- ----------------------------
-- Records of user_role
-- ----------------------------
INSERT INTO `user_role` VALUES ('8', '1');
INSERT INTO `user_role` VALUES ('10', '2');

   pom.xml内容如下

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.xiangxue.jack</groupId>
    <artifactId>Auth-Center</artifactId>
    <version>v1.0</version>

    <name>Auth-Center</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>


    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--这个是支持auth2.0,很重要, 内部已经包含jwt, 所以要排除掉-->
        <dependency>
            <groupId>org.springframework.security.oauth.boot</groupId>
            <artifactId>spring-security-oauth2-autoconfigure</artifactId>
            <version>2.0.0.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.security</groupId>
                    <artifactId>spring-security-jwt</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!--对jwt的支持-->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-jwt</artifactId>
            <version>1.0.9.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.hl.AuthCenterApplication</mainClass>
                </configuration>
            </plugin>
            <!--防止jks文件被mavne编译导致不可用-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <nonFilteredFileExtensions>
                        <nonFilteredFileExtension>cert</nonFilteredFileExtension>
                        <nonFilteredFileExtension>jks</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>
        </plugins>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**.*</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>

2、消费方模块结构如下

    BPwdEncoderUtil类的内容如下

package com.hl.config;

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

public class BPwdEncoderUtil {
    private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();

    public static String BCryptPassword(String password){
        return encoder.encode(password);
    }

    public static boolean matches(CharSequence rawPassword, String encodedPassword){
        return encoder.matches(rawPassword,encodedPassword);
    }
}

   GloablMethodSecurityConfig类的内容如下

package com.hl.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class GlobalMethodSecurityConfig {
}

  JWT类的内容如下

package com.hl.config;

public class JWT {
    private String access_token;
    private String token_type;
    private String refresh_token;
    private int expires_in;
    private String scope;
    private String jti;

    public String getAccess_token() {
        return access_token;
    }

    public void setAccess_token(String access_token) {
        this.access_token = access_token;
    }

    public String getToken_type() {
        return token_type;
    }

    public void setToken_type(String token_type) {
        this.token_type = token_type;
    }

    public String getRefresh_token() {
        return refresh_token;
    }

    public void setRefresh_token(String refresh_token) {
        this.refresh_token = refresh_token;
    }

    public int getExpires_in() {
        return expires_in;
    }

    public void setExpires_in(int expires_in) {
        this.expires_in = expires_in;
    }

    public String getScope() {
        return scope;
    }

    public void setScope(String scope) {
        this.scope = scope;
    }

    public String getJti() {
        return jti;
    }

    public void setJti(String jti) {
        this.jti = jti;
    }
}

     JwtConfig类的内容如下

package com.hl.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.JwtTokenStore;
import org.springframework.util.FileCopyUtils;

import java.io.IOException;

@Configuration
public class JwtConfig {

    @Autowired
    private JwtAccessTokenConverter jwtAccessTokenConverter;

    @Bean
    @Qualifier("tokenStore")
    public TokenStore tokenStore() {
        return new JwtTokenStore(jwtAccessTokenConverter);
    }

    @Bean
    public JwtAccessTokenConverter jwtTokenEnhancer() {
        // 用作JWT转换器
        JwtAccessTokenConverter converter =  new JwtAccessTokenConverter();
        Resource resource = new ClassPathResource("public.cert");
        String publicKey;
        try {
            publicKey = new String(FileCopyUtils.copyToByteArray(resource.getInputStream()));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        //设置公钥
        converter.setVerifierKey(publicKey);
        return converter;
    }
}

     ResourceServerConfig类的内容如下

package com.hl.config;

import org.springframework.beans.factory.annotation.Autowired;
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 org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
import org.springframework.security.oauth2.provider.token.TokenStore;

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

    @Autowired
    private TokenStore tokenStore;

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/user/login","/user/register").permitAll() // 表示这两个接口可以无条件访问
                .antMatchers("/**").authenticated();
    }

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.tokenStore(tokenStore);
    }
}

    UserLoginDTO类的内容如下

package com.hl.config;

import com.hl.bean.User;

public class UserLoginDTO {
    private JWT jwt;
    private User user;

    public JWT getJwt() {
        return jwt;
    }

    public void setJwt(JWT jwt) {
        this.jwt = jwt;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

    applicationContext.properties配置文件的内容如下

spring.application.name=web-auth
server.port=8083

#########################管理监控的一些监控端点###################
management.endpoint.health.show-details=always
management.endpoint.shutdown.enabled=true
#hystrix.stream  开放所有的监控接口
management.endpoints.web.exposure.include=*


################### 其它的一些相关的配置##############
spring.main.allow-bean-definition-overriding=true

################################下面是配置以密码的方式配置认证的一些参数#####################
# 此uri借助了zuul的路由,它是由auth2自动调用的。注意,此处只能使用ip:port的方式,因为是由jwt框架自己调用,并没有像ribbon那样有服务的列表
security.oauth2.resource.jwt.key-uri=http://localhost:3040/oauth/token_key

    3、服务方模块结构

    关键类的结构和《Busniess-Logic》模块一样

三、效果演示

      依次启动《Auth-Center》、《Business-Logic》和《Business-Order》工程

     下面是从认证中心获得token需要的参数和数据的对应关系

 

     以下是请求的演示效果

 

     可以在”https://jwt.io/“中校验access_token是否正确,效果如图

 

四、其它

      demo代码地址:https://gitee.com/im_a_follower_of_code_cloud/Auth20_JWT_Study.git

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Auth2.0是一种用于授权的开放标准,它允许用户授权第三方应用访问他们的资源,而无需直接分享他们的凭据。这种授权方式对于保护用户敏感信息非常有用。 JWT(JSON Web Token)是Auth2.0中使用的一种令牌格式。它由三个部分组成:头部、负载和签名。头部指定令牌的类型和加密算法,负载包含有关用户的信息,签名用于验证令牌的真实性。 Spring Security是Spring框架中的一个模块,用于处理应用的安全性。它提供了一套用于认证、授权和保护应用资源的功能。Spring Security可以与Auth2.0和JWT集成,以提供更强大的安全性。 在使用Spring Security进行认证时,可以将Auth2.0作为认证提供者。用户通过提供有效的令牌进行认证,Spring Security会验证令牌的真实性和有效性。 当用户成功认证后,Spring Security可以使用JWT来授权访问应用资源。它可以将用户信息包含在JWT负载中,并使用签名确保令牌的完整性。在访问应用资源时,Spring Security会验证JWT的签名,并提取用户信息以进行授权判断。 使用Auth2.0和JWT的好处是可以将认证和授权逻辑与应用逻辑分离,提高代码的可维护性和安全性。此外,JWT的轻量级和可扩展性使得它在分布式系统和微服务架构中非常适用。 综上所述,Auth2.0、JWT和Spring Security是一套强大的工具,可以帮助开发人员构建安全可靠的应用程序,并提供用户认证和资源授权的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值