Spring OAuth2 JDBCTokenStore performance and database schema

一曲冷凌霜 提交于 2019-12-06 08:05:27

问题


I use MySQL5.5 + REST(Jersey) + Spring Security + Spring OAuth2. Right now I'm doing performance testing and noticed that

org.springframework.security.oauth2.provider.token.store.JdbcTokenStore.readAuthentication method is working really slow.. especialy this part of the method:

authentication = jdbcTemplate.queryForObject(selectAccessTokenAuthenticationSql,
                    new RowMapper<OAuth2Authentication>() {
                        public OAuth2Authentication mapRow(ResultSet rs, int rowNum) throws SQLException {
                            return deserializeAuthentication(rs.getBytes(2));
                        }
                    }, extractTokenKey(token));

In order to improve performance I'm going to add MySQL index to the following query:

private static final String DEFAULT_ACCESS_TOKEN_AUTHENTICATION_SELECT_STATEMENT = "select token_id, authentication from oauth_access_token where token_id = ?";

on token_id field but the main issue is that regarding the official oauth2 Spring database schema, for example https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/test/resources/schema.sql

create table oauth_access_token (
  token_id VARCHAR(256),
  token LONGVARBINARY,
  authentication_id VARCHAR(256) PRIMARY KEY,
  user_name VARCHAR(256),
  client_id VARCHAR(256),
  authentication LONGVARBINARY,
  refresh_token VARCHAR(256)
);

token_id is VARCHAR(256) and due to a MySQL bugs or limitations I'm unable to add this index (for example MySQL Specified key was too long)..

So my question is - is it mandatory to have token_id as VARCHAR(256) or I can change it to VARCHAR(255) ?

来源:https://stackoverflow.com/questions/30654617/spring-oauth2-jdbctokenstore-performance-and-database-schema

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!