基于Spring Boot2 + Spring Security OAuth2 实现单点登陆(二)
2018-03-30 18:00
337 查看
关于单点登陆的基本实现:点这里
源码地址
配置数据库链接
创建数据库表
这里直接使用程序调用sql脚本实现。
添加测试数据
实现ApplicationRunner(spring boot 启动时会调用这个接口),添加数据
实现一个基于jdbc的OAuth2认证
本文主要介绍使用jdbc存储token的例子。代码基于上一篇文章做一些修改实现。源码地址
修改项目依赖
project("sso-auth-server") { dependencies { compile 'org.springframework.boot:spring-boot-starter-web' compile 'org.springframework.boot:spring-boot-starter-security' compile 'org.springframework.boot:spring-boot-starter-jdbc' // 新添加 compile 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.0.RELEASE' runtime 'mysql:mysql-connector-java' // 新添加 } }
创建OAuth2数据存储相关表
Spring官方给出了基于HSQL建表sql。本文数据库使用mysql,对它做了一些修改。看这里。配置数据库链接
spring: datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: 123456 url: jdbc:mysql://127.0.0.1:3306/oauth2test
创建数据库表
这里直接使用程序调用sql脚本实现。
public class AuthenticationApplication { private static final Logger log = LoggerFactory.getLogger(AuthenticationApplication.class); public static void main(String[] args) throws SQLException { initDatabase(); new SpringApplicationBuilder(AuthenticationApplication.class) .run(args); } public static void initDatabase() throws SQLException { ResourceDatabasePopulator populator = new ResourceDatabasePopulator(); populator.setSqlScriptEncoding("utf-8"); populator.addScript(new DefaultResourceLoader().getResource("schema.sql")); populator.populate(DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306", "root", "123456")); log.info("database init complete"); } }
配置AuthorizationServerConfigurer实现类
修改配置public class Oauth2Config extends AuthorizationServerConfigurerAdapter implements ApplicationRunner { ...省略重复代码 @Autowired private DataSource dataSource; // 使用JdbcTokenStore把token存储到数据库中,RedisTokenStore的使用方法也类似 @Bean public TokenStore jdbcTokenStore() { return new JdbcTokenStore(dataSource); } @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { // 设置OAuth2的client信息也使用数据库存储和读取 clients.jdbc(dataSource); } @Override public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { endpoints.authenticationManager(authenticationManager).tokenStore(jdbcTokenStore()); } ... }
添加测试数据
实现ApplicationRunner(spring boot 启动时会调用这个接口),添加数据
@Override public void run(ApplicationArguments args) throws Exception { // 给测试环境添加预置的client JdbcClientDetailsService clientDetailsService = new JdbcClientDetailsService(dataSource); PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder(); clientDetailsService.setPasswordEncoder(passwordEncoder); try { clientDetailsService.loadClientByClientId("testclient"); } catch (ClientRegistrationException e) { BaseClientDetails details = new BaseClientDetails(); details.setClientId("testclient"); details.setClientSecret("testclient"); details.setScope(Arrays.asList("test", "test2")); details.setAutoApproveScopes(Arrays.asList("test")); details.setAuthorizedGrantTypes(Arrays.asList("authorization_code", "refresh_token")); clientDetailsService.addClientDetails(details); } log.info("add default client complete"); }
测试方法与上一篇介绍相同
相关文章推荐
- 基于Spring的Github第三方登录--通用化的第三方登陆实现
- 基于c#实现网站的自动登陆
- 基于gin框架和jwt-go中间件实现小程序用户登陆和token验证
- MVC 编程思想实例 (基于java,jdbc操作mysql数据库实现登陆注册)
- 基于WebClient实现Http协议的Post与Get对网站进行模拟登陆和浏览实例
- 基于cookie使用过滤器实现客户每次访问自登陆一次
- 一个基于wap1.0的web项目(图文)--实现登陆验证
- MVC 基于 AuthorizeAttribute 实现的登陆权限控制
- 基于Spring的Github第三方登录--通用化的第三方登陆实现
- 基于smack的即时聊天系统之登陆功能的实现
- 利用cookie实现登陆知网与抽屉网 基于session自动登录抽屉网 cookie与session区别
- 基于node+express+mysql的登陆实现
- JavaWeb 基于Session的用户登陆注销实现
- 基于cookie使用过滤器实现客户每次访问自登陆一次
- JavaWeb基于Session实现的用户登陆注销方法示例
- 在TOMCAT下实现基于表单验证的登陆方式
- 备忘录《一》基于cookie使用过滤器实现客户每次访问自登陆一次
- Laravel 5.5基于内置的Auth模块实现前后台登陆详解
- 基于OAuth2.0实现第三方授权登陆(百度账号)
- 基于jQuery Easyui实现登陆框界面