Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >在spring boot安全中使用authenticationProvider时如何配置数据源?

在spring boot安全中使用authenticationProvider时如何配置数据源?
EN

Stack Overflow用户
提问于 2020-10-29 02:44:00
回答 1查看 132关注 0票数 2

如果我使用的是auth.jdbcAuthentication().dataSource(datasource);,它将是jdbcAuthentication

现在我有两个数据库,一个用于app,另一个用于安全性。

我找不到使用authenticationProvider()来配置要使用哪个数据库的方法

代码语言:javascript
代码运行次数:0
复制
@Autowired
@Qualifier("securityDataSource")
private DataSource securityDataSource;

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {

    // use jdbc authentication ... oh yeah!!!       
    auth.jdbcAuthentication().dataSource(securityDataSource);
    auth.authenticationProvider(authenticationProvider());
    
}

 @Bean
public DaoAuthenticationProvider authenticationProvider() {
    DaoAuthenticationProvider auth = new DaoAuthenticationProvider();
    auth.setUserDetailsService(userService); //set the custom user details service
    auth.setPasswordEncoder(passwordEncoder()); //set the password encoder - bcrypt
    return auth;
}

我是如何解决这个问题的

代码语言:javascript
代码运行次数:0
复制
@Configuration
@EnableJpaRepositories(basePackages={"${spring.data.jpa.security.repository.packages}"}, 
                       entityManagerFactoryRef = "securityEntityManagerFactory")
public class DemoSecurityDataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix="security.datasource")
    public DataSource securityDataSource() {
        return DataSourceBuilder.create().build();
    }
    
    @Bean
    @ConfigurationProperties(prefix="spring.data.jpa.security")
    public LocalContainerEntityManagerFactoryBean securityEntityManagerFactory(EntityManagerFactoryBuilder builder, @Qualifier("securityDataSource") DataSource securityDataSource) {
        return builder
                .dataSource(securityDataSource)
                .build();
    }   
}
代码语言:javascript
代码运行次数:0
复制
@Configuration
@EnableJpaRepositories(basePackages={"${spring.data.jpa.app.repository.packages}"},
                       entityManagerFactoryRef = "appEntityManagerFactory")
public class DemoAppDataSourceConfig {
    
    @Primary
    @Bean
    @ConfigurationProperties(prefix="app.datasource")
    public DataSource appDataSource() {
        return DataSourceBuilder.create().build();
    }
    
    @Primary
    @Bean
    @ConfigurationProperties(prefix="spring.data.jpa.app")
    public LocalContainerEntityManagerFactoryBean appEntityManagerFactory(EntityManagerFactoryBuilder builder, DataSource appDataSource) {
        return builder
                .dataSource(appDataSource)
                .build();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-03 12:00:45

您可以通过编程方式配置DataSources,然后使用JdbcUserDetailsManager来配置Spring Security应该使用哪个and。

在下面的示例中,有两个DataSources,一个使用H2,一个使用MySQL。

Spring Security使用安全DataSource,因为我们已经添加了“安全”@Qualifier

代码语言:javascript
代码运行次数:0
复制
@Bean("security")
public DataSource securityDataSource() {
    return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.H2)
            .addScript("classpath:org/springframework/security/core/userdetails/jdbc/users.ddl")
            .build();
}

@Bean
@Primary
public DataSource primaryDataSource() {
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
    dataSourceBuilder.url("jdbc:mysql://localhost:3306/db_example");
    dataSourceBuilder.username("springuser");
    dataSourceBuilder.password("ThePassword");
    return dataSourceBuilder.build();
}

@Bean
UserDetailsManager users(@Qualifier("security") DataSource dataSource) {
    UserDetails user = User.builder()
            .username("user")
            .password("{bcrypt}$2a$10$GRLdNijSQMUvl/au9ofL.eDwmoohzzS7.rmNSJZ.0FxO/BTk76klW")
            .roles("USER")
            .build();
    JdbcUserDetailsManager users = new JdbcUserDetailsManager(dataSource);
    users.createUser(user);
    return users;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64584225

复制
相关文章
如何添加linux开机启动项
摘要:以往的服务通常使用supervisord或者crontab的方式来守护或者定时执行,最近遇到了自己写的服务所依赖到一些组件服务,在开机的没有自动启动的问题,所以这次对添加linux开机自启动的一些方式做一个总结。让自己的服务可以做到无人托管开机自启动,减少运营成本的同时可以防止有人偷偷写入开机启动项,启动一些没有必要的服务。
机智的程序员小熊
2019/04/21
18.1K0
如何添加linux开机启动项
如何删除启动项中 program 空白程序启动项,最简教程;
参考文献:https://www.xtremerain.com/remove-unknown-program-startup/
西湖醋鱼
2020/12/30
5.7K0
如何删除启动项中 program 空白程序启动项,最简教程;
Xamarin Android 修改主题样式
app的风格的选项 可以按住ctr然后点击Theme.AppCompat.Light.DarkActionBar就会跳转
宿春磊Charles
2021/11/15
2.1K0
Xamarin Android 修改主题样式
1. 什么是Xamarin
Xamarin 是一个 .NET 开源的平台,主要用于通过 .NET 构建 IOS 、 Android 以及 Windows App 。利用 Xamarin 我们可以管理不同平台 APP 的共享代码与基础平台代码的通信,并且 Xamarin 上开发的 APP 是在托管环境中运行的,也就是说它会帮助我们来管理内存分配、垃圾回收等事情。Xamarin 可以让开发人员跨平台共享应用程序的代码,这样就可以使用一种编程语言开发所有平台的 App 。
喵叔
2020/09/08
4.4K0
解决Android Studio 不能启动或新建项目的情况
对于android studio 0.3.x 及以下的版本,安装或启动过程出现任何问题可以查看这篇博客。http://www.cnblogs.com/timeng/archive/2013/05/17/3084185.html 。
bering
2019/12/03
1.4K0
xamarin android listview的用法
listview也许是用的非常频繁的一个控件之一,下面我写一个xamarin的listview栗子,大家尝一尝xamarin android开发的乐趣。原谅我的大小写吧.
全栈程序员站长
2022/09/15
8790
xamarin android listview的用法
Xamarin开发笔记—WebView双项事件调用
1.Xamarin调用WebView: 原理:Xamarin.Forms WebView内置方法xx.Eval(..)可以调用到页面里面的js函数。 WebView展示的代码如下: var htmlSource = new HtmlWebViewSource(); htmlSource.Html = @"<html> <head> <meta charset='UTF-8'> <title></t
磊哥
2018/05/08
1.2K0
Xamarin开发笔记—WebView双项事件调用
SpringBoot 是如何启动的
Spring源码中我已经知道的两种上下文: ClassPathXmlApplicationContext、AnnotationConfigApplicationContext
王小明_HIT
2022/06/14
6470
SpringBoot 是如何启动的
我是如何发现优质开源项目的?
GitHubDaily 是从 2015 年 10 月开始运营的,至今三年有余,微博分享了数百个开源项目,前不久我已将微博分享的开源项目整理后发布到 GitHub 上了。
GitHubDaily
2019/03/26
4340
我是如何发现优质开源项目的?
C# Xamarin移动开发项目实战篇
3.6、Android漂亮的Loading提示控件(ProgressDialog)
跟着阿笨一起玩NET
2018/09/20
9.9K3
C# Xamarin移动开发项目实战篇
C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码
GuZhenYin
2018/01/04
5.5K0
C#使用Xamarin开发可移植移动应用(1.入门与Xamarin.Forms页面),附源码
xamarin.android_云开发实战项目
试读文档下载地址:http://pan.baidu.com/s/1jGEHhhO 密码:vcfm
全栈程序员站长
2022/11/03
1.5K0
centos7如何添加开机启动项?
1.系统服务管理命令,如果是通过yum安装的软件,开机启动脚本,已经自动创建好了,直接执行如下命令
超蛋lhy
2019/06/05
2.5K0
easybcd删除win10启动项如何恢复?
制作windows启动盘; u盘启动 开始安装,选择左下角的“修复计算机”; 运行命令 bcdboot c:\windows /l zh-cn 从系统盘C:\Windows目录中复制启动文件,并创建BCD(中文)启动菜单,从而修复系统启动环境 修复成功!
用户1631856
2018/06/13
2.1K0
管理 macOS 启动项
macOS 启动项大家众所周知的是 系统偏好设置->用户与群组->登录项 里面的设置,但有时候我通过这里无法找到系统自动启动的应用程序,比如 Microsoft Office AutoUpdate 组件,它会在系统启动时自动加载,但登录项里面却看不见。所以网络上搜索一下,摘录了部分重要的内容,原文在此: https://www.jianshu.com/p/49dabd8ec9bb launchctl 加载 plist 文件实现开机启动程序 其中几处重要的位置就是如下几个位置: ~/Library/Laun
我与梦想有个约会
2018/07/02
1.6K0
dubbo provider是如何启动的
Netty支持多种服务端的server实例,包括mina、netty等,如下所示:
luoxn28
2020/07/14
3920
我是如何开发一个项目的
鉴于这个毕设已经重写第三遍了,我觉得有必要写这么两篇来指导一下我自己了。 第一篇是《我是如何开发一个项目的》,从我浅薄的项目开发及带队经验总结,并以这第三次毕设作为实战指导,写好之后可以为以后做项目起一个指导作用。 第二篇是《我的毕设实战指南》,目前毕设的业务是定在了“仿12306”,不出意外不会再变了。第二篇将总结以往和这两次的失败经验,老老实实的把项目分析做好,不能再重来了呀,真的要吐了呀。。。
看、未来
2021/11/04
5740
管理 macOS 启动项
macOS 启动项大家众所周知的是 系统偏好设置->用户与群组->登录项 里面的设置,但有时候我通过这里无法找到系统自动启动的应用程序,比如 Microsoft Office AutoUpdate 组件,它会在系统启动时自动加载,但登录项里面却看不见。所以网络上搜索一下,摘录了部分重要的内容,原文在此: https://www.jianshu.com/p/49dabd8ec9bb launchctl 加载 plist 文件实现开机启动程序 其中几处重要的位置就是如下几个位置: ~/Library/Laun
我与梦想有个约会
2018/07/02
1.6K0
Win10如何手动添加开机启动项
在日常生活中,偶尔要求其中的软件在开机时便能自动启动,比如MySQL一般被设置为自启动项。今天将为大家介绍window10中如何添加开机启动项。
Jean
2019/11/24
35.2K0
Win10如何手动添加开机启动项
C# Xamarin For Android自动升级项目实战
一、课程介绍 “明人不说暗话,跟着阿笨一起玩Xamarin”,本次分享课程阿笨将带来大家一起学习Xamarin For Android系列《C# Xamarin For Android自动升级项目实战》。如果您同样对本次分享课程感兴趣的话,那么请跟着阿笨一起学习吧。 本次分享课程适合人群如下: 1、 热爱Xamarin跨平台移动开发。 2、进一步了解和学习Xamarin For Android移动开发实战知识。 本次分享课包含实战分享知识点如下: 1、C# Android 如何制作打包编译APK
跟着阿笨一起玩NET
2018/09/20
2.6K0
C# Xamarin For Android自动升级项目实战

相似问题

参数化链接服务Azure数据工厂

19

在Azure数据工厂的链接服务中参数化集成运行时

317

Azure数据工厂链接服务问题

12

参数化链接服务的Azure ARM模板参数

14

Azure数据工厂无法参数化Blob存储链接服务中的密钥库secretName

112
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文