Java编程,配置mongoUri连接mongodb时,需对特殊字符进行转义

发布于:2024-11-23 ⋅ 阅读:(174) ⋅ 点赞:(0)

一、背景

java程序连接mongo有两种方式:

  • 用户名和密码方式
  • uri方式

1、用户名和密码

以用户数据库为例,注意看它的密码

spring:
  data:
    mongodb:
      host: 192.168.10.17
      database: db_user_service
      port: 3717
      username: user_service
      password: user_service@321

2、uri

转换为uri方式,就只需要一行搞定。

# 这里的密码假设为123456,如果像上面那样含有特殊字符,则需要进行转义

spring:
  data:
    mongodb:
      uri: mongodb://user_service:123456@192.168.10.17:3717/db_user_service?maxIdleTimeMS=60000&maxPoolSize=50

有时候,为了安全性,dba会设置比较复杂的密码,含有特殊字符,比如@符号等。

如果使用方式一(用户名和密码)连接mongodb时,password里支持@符号。

但是,如果使用方式二(uri)连接,则需要对@符号转义为%40

否则java程序在解析uri的时候,会提前截取到第一个@,把前半部分错认为数据库的密码。

在这里插入图片描述

二。解决办法

当使用uri方式连接mongodb时,对特殊符号,特别是@符号,进行转义。

转换的结果是:

spring:
  data:
    mongodb:
      uri: mongodb://user_service:user_service%40321@192.168.10.17:3717/db_user_service?maxIdleTimeMS=60000&maxPoolSize=50

这里顺便说一下,如果是Mysql数据库的密码含有!感叹号这样的特殊字符,它的转义方式则是反斜杠。

  • 修改前
# 85f7e!d2e6X是用户数据库的实际密码
mysql -h 192.168.10.18 -u user_service -p85f7e!d2e6X -D db_user_service
  • 修改后
# 85f7e\!d2e6X是转义后的结果
mysql -h 192.168.10.18 -u user_service -p85f7e\!d2e6X -D db_user_service

涉及到需要转义的字符有很多,这里就不一一赘述了。

遇到特殊字符的时候多留个心眼,设置数据库密码的时候,不要太复杂了哈。

比较是在内网环境下,不对外网访问的情况下,密码相对安全即可。(少折腾特殊字符)


网站公告

今日签到

点亮在社区的每一天
去签到