Play Framework,RAW 字段无法正常工作

Posted

技术标签:

【中文标题】Play Framework,RAW 字段无法正常工作【英文标题】:Play Framework, RAW field doesn't work properly 【发布时间】:2012-07-26 07:04:24 【问题描述】:

我有一个像这样的用户模型

@Entity
@Table(name="SHOPPER")
public class User extends GenericModel 

    @Id
    @Column(name="SHRFNBR")
    @GeneratedValue(generator="SEQ_SHP", strategy=GenerationType.SEQUENCE)
    @SequenceGenerator(name="SEQ_SHP", sequenceName="SEQ_SHP", allocationSize=1)
    public Long id;

    @Column(name="SHLOGID")
    public String email;

    @Column(name="SHLPSWD")
    public String password;


    public static User isUser(String user, String pass)
        return User.find("byEmailAndPassword", user, pass).first();
    

在 DB 密码上它是 RAW 类型,在控制器上它是用 RSA 编码的。

主要是它没有找到任何结果,因为进入数据库的二进制文件似乎与现场的二进制文件不同。

起初我认为这可能是应用程序上的一些字符编码问题,但后来我指向同一个数据库,但在生产中并且它有效。所以我检查了开发数据库,​​发现另一个字符集而不是 ISO-8859-1 (prod) 是 ISO-8859-15 (devel),这似乎没什么不同。

更新开发字符集后情况相同。有没有其他地方 RSA 字符串在 DB 上编码错误?

流程说明:

该过程是一个登录过程,用户在其中插入电子邮件和密码,最后一个使用 RSA 进行编码,并将结果发送到数据库进行比较。 DB 上的字段包含这样的值:

CB4F3ECB7763C98EF67CA761700D1FB255F90E4473B1BB594B2238756307DF2D155D57A2CBA2930C‌162CB0634765D48EA111F743F6825F2457340148F680E300

更多信息:

数据库 Oracle 10g 播放框架 1.2.4

【问题讨论】:

为了帮助您,我们需要有关该过程的更多信息:在正常过程中,您的密码被编码到数据库中,当您检查它时,您以与控制器中的密码相同的方式编码并使用您的查找器检查密码是否匹配 @SebCesbron 密码此时仍然存储在数据库中,这个过程是一个登录过程。当用户插入电子邮件和密码时,最后一个被编码并发送到数据库进行比较。在数据库中,该字段包含此字段(例如:CB4F3ECB7763C98EF67CA761700D1FB255F90E4473B1BB594B2238756307DF2D155D57A2CBA2930C162CB0634765D48EA111F743F6825F2457340148F680Espan>) pass参数的内容是明文还是加密?加密在哪里进行?你也可以分享那部分代码吗? @Tom 他们在进入 bbdd 之前已被编码。它使用类似 RSA 的工具在控制器上进行编码。毕竟,我已经以一种肮脏的方式解决了它,在它进入 bbdd 之前编辑了哈希,现在它可以正常工作,但仍在尝试找到更好的方法来解决这个问题并真正解决问题。 【参考方案1】:

不要将二进制数据映射到字符串,而是使用 byte[],这样就不会出现任何字符编码问题。

【讨论】:

以上是关于Play Framework,RAW 字段无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

Play Framework:数据库连接池关闭

Scala + Play Framework + Slick - Json 作为模型字段

Play Framework 2.4 - 注入的字段始终为空

渲染 Play framework 2.0.2 模板的一部分

Play framework & CAS - 如何登录功能测试?

Play Framework 2 Ebean 为字段指定默认值