依赖,本例中用到了spring security user 相关接口,需要依赖 spring-boot-starter-security
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.zno</groupId> <artifactId>oauth2-jdbc-plugin</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>5.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
package cn.zno.oauth.jdbc; import javax.sql.DataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.SqlSessionTemplate; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; @Configuration @MapperScan(basePackages= {"cn.zno.oauth.jdbc.mapper"}) public class MybatisConfig { @Bean(name = "oauth2DataSource") @ConfigurationProperties(prefix = "spring.datasource.oauth2") public DataSource getDataSource() { DataSource dataSource = DataSourceBuilder.create().build(); return dataSource; } @Bean(name = "oauth2SqlSessionFactory") public SqlSessionFactory getSqlSessionFactory(@Qualifier("oauth2DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/*.xml"));// ① return bean.getObject(); } @Bean(name = "oauth2TransactionManager") public DataSourceTransactionManager getDataSourceTransactionManager( @Qualifier("oauth2DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "oauth2SqlSessionTemplate") public SqlSessionTemplate getSqlSessionTemplate( @Qualifier("oauth2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }
注:①处,mapper 目录必须存在。替换方式可以移除xml ,将sql 通过 @org.apache.ibatis.annotations.Select方式写入java类
@Select("select username,password,roles from oauth_user where username = #{username,jdbcType=VARCHAR}")
public User queryByUsername(@Param("username") String userName);
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.zno.oauth.jdbc.mapper.UserMapper"> <select id="queryByUsername" resultType="cn.zno.oauth.jdbc.entity.User"> select username,password,roles from oauth_user where username = #{username,jdbcType=VARCHAR} </select> </mapper>
application.properties
spring.datasource.oauth2.type = com.alibaba.druid.pool.DruidDataSource spring.datasource.oauth2.driver-class-name = com.mysql.cj.jdbc.Driver spring.datasource.oauth2.jdbc-url = jdbc:mysql://xxx.com:5934/oauth2db?useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai spring.datasource.oauth2.username = yyy spring.datasource.oauth2.password = zzz
使用:
@Configuration @EnableAuthorizationServer @Import(MybatisConfig.class) public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { @Autowired @Qualifier("oauth2DataSource") DataSource dataSource; ... }