是否可以通过模型从DB中保存会话值

时间:2015-11-03 15:18:51

标签: java session playframework-2.0 ebean

我遇到了将userId和其他属性保存并保存在我的数据库中的问题,比如审计操作并在保存或更新任何bean之前将createdBy和modifiedBy保存在数据库中,我在这个问题中找到了有关createdBy和modifiedBy的有用答案: Is it possible to use @PrePersist and @PreUpdate with eBean and Play! 2.0?

这是我的班级:

@MappedSuperclass
public abstract class BaseModel extends Model {

    @Id
    @Column
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Integer id;

    @Column
    @CreatedTimestamp
    public Timestamp createdDate;

    @Column
    @UpdatedTimestamp
    public Timestamp updatedDate;

    @Column
    @Version
    private long version=0;

    @Column
    public String updatedBy;

    @Column
    public String createdBy;


    public BaseModel() {
    }

    @Override
    public void save() {
        boolean isInstanceOfAccount = this instanceof Account;
        if (!isInstanceOfAccount) {
            int userId = Integer.parseInt(session().get(ViewModelsConstants.User.USER_ID);
            updatedBy = String.valueOf(userId);
            // etc to 
        }
        super.save();
    }
}

你可以注意到我已经覆盖了保存方法(所以我会更新)所以当我像product.save()那样调用我的bean时,我保存id为谁添加或者更新。但我对Session inside Model in play framework有一个类似的未回答的问题,

我也许可以添加方法有参数保存和调用超级像:

public void save(int userId) {
    boolean isInstanceOfAccount = this instanceof Account;
    if (!isInstanceOfAccount) {
        updatedBy = String.valueOf(userId );
        // etc to 
    }
    super.save();
}

但是我已经存在代码而且我不想在我的所有类中进行修改,如果我想添加更多或删除参数,我需要重构

对此最酷的(最佳实践)解决方案是什么?

我现在简单愚蠢的问题:我如何从会话传递到模型或者我如何保存参数(比如登录时的userId)在保存或更新模型时在模型中使用?

1 个答案:

答案 0 :(得分:0)

我认为这是一个古老的问题,我在经历时找到了解决方案,但是如果你想找到答案,你可以在这里看到我最新的答案和问题:

Play framework and ionic for mobile I need Security without cookies but token

它的商店代币没有cookies,或者你可以使用cookies并从控制器读取它。