首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Base64: java.lang.IllegalArgumentException:非法字符

Base64: java.lang.IllegalArgumentException:非法字符
EN

Stack Overflow用户
提问于 2015-02-18 12:47:58
回答 6查看 317.6K关注 0票数 47

我试图在用户注册后发送一封确认邮件。为此,我使用了JavaMail库和Java8 Base64 util类。

我用以下方式对用户电子邮件进行编码:

代码语言:javascript
运行
复制
byte[] encodedEmail = Base64.getUrlEncoder().encode(user.getEmail().getBytes(StandardCharsets.UTF_8));
Multipart multipart = new MimeMultipart();
InternetHeaders headers = new InternetHeaders();
headers.addHeader("Content-type", "text/html; charset=UTF-8");
String confirmLink = "Complete your registration by clicking on following"+ "\n<a href='" + confirmationURL + encodedEmail + "'>link</a>";
MimeBodyPart link = new MimeBodyPart(headers,
confirmLink.getBytes("UTF-8"));
multipart.addBodyPart(link);

其中confirmationURL是:

代码语言:javascript
运行
复制
private final static String confirmationURL = "http://localhost:8080/project/controller?command=confirmRegistration&ID=";

然后在ConfirmRegistrationCommand中以这样的方式解码:

代码语言:javascript
运行
复制
    String encryptedEmail = request.getParameter("ID");

    String decodedEmail = new String(Base64.getUrlDecoder().decode(encryptedEmail), StandardCharsets.UTF_8);

    RepositoryFactory repositoryFactory = RepositoryFactory
            .getFactoryByName(FactoryType.MYSQL_REPOSITORY_FACTORY);
    UserRepository userRepository = repositoryFactory.getUserRepository();
    User user = userRepository.find(decodedEmail);

    if (user.getEmail().equals(decodedEmail)) {
        user.setActiveStatus(true);
        return Path.WELCOME_PAGE;
    } else {
        return Path.ERROR_PAGE;
    }

当我试图破译时:

代码语言:javascript
运行
复制
http://localhost:8080/project/controller?command=confirmRegistration&ID=[B@6499375d

我要去接java.lang.IllegalArgumentException: Illegal base64 character 5b了。

我尝试使用基本的编码/解码器(而不是URL ),但没有成功。

解决:

问题是下一个问题-在这一行中:

代码语言:javascript
运行
复制
 String confirmLink = "Complete your registration by clicking on following"+ "\n<a href='" + confirmationURL + encodedEmail + "'>link</a>";

我对一个字节数组调用toString,所以我应该执行以下操作:

代码语言:javascript
运行
复制
String encodedEmail = new String(Base64.getEncoder().encode(
                user.getEmail().getBytes(StandardCharsets.UTF_8)));

感谢,乔恩·斯基特,

EN

Stack Overflow用户

发布于 2019-02-11 17:33:02

我为我的奴隶收到了这个错误。我通过将节点从“已知主机文件验证策略”更改为“非验证验证策略”来修正它。

票数 0
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28584080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档