Hibernate 3和Struts 2实现Jasypt时出错 [英] Error implementing Jasypt with Hibernate 3 and Struts 2

查看:201
本文介绍了Hibernate 3和Struts 2实现Jasypt时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图使用Jasypt和hibernate 3加密webapp中的密码。我按照

这是我的hibernate映射:

 < hibernate-mapping package =webapp.entity> 

< typedef name =encryptedclass =org.jasypt.hibernate.type.EncryptedStringType>
< param name =encryptorRegisteredName> strongHibernateStringEncryptor< / param>
< / typedef>

< class name =Usertable =Users>
< id name =name
column =name
type =string>
< / id>

column =passwd
type =encrypted
not-null =true>
< / property>

< / class>

< / hibernate-mapping>

现在我每次使用hibernate打开会话时注册加密器:

  public void initHibSession(){
HibernateUtil.buildSessionFactory();
hib_session = HibernateUtil.getSessionFactory()。getCurrentSession();
if(hib_session!= null&& hib_session.isOpen()){
hib_session.close();
hib_session = HibernateUtil.getSessionFactory()。openSession();
}
hib_session.beginTransaction();

StandardPBEStringEncryptor strongEncryptor = new StandardPBEStringEncryptor();
strongEncryptor.setPassword(aStrongPassword);
HibernatePBEEncryptorRegistry注册表= HibernatePBEEncryptorRegistry.getInstance();
registry.registerPBEStringEncryptor(strongHibernateStringEncryptor,strongEncryptor);
}

然后,每次尝试访问用户时,都会抛出以下异常:

  FreeMarker模板错误! 

方法public java.lang.String org.jasypt.exceptions.EncryptionInitializationException上的org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int)引发异常:未注册字符串加密器休眠与名称strongHibernateEncryptor
有问题的指令:
----------
==& gt; $ {msgs [0] [0]} [在第76行,org / apache / struts2 / dispatcher / error.ftl中的第25列]
----------

程序员的Java backtrace:
----------
freemarker.template.TemplateModelException:方法public java.lang.String org.apache.commons.lang.exception.NestableRuntimeException。在org.jasypt.exceptions.EncryptionInitializationException调用时的getMessage(INT)抛出一个异常:没有在freemarker.ext.beans.SimpleMethodModel.exec名称为strongHibernateEncryptor
注册休眠字符串加密(SimpleMethodModel.java:130)在freemarker.ext.beans.SimpleMethodModel.get(SimpleMethodModel.java:138)
在freemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:111)

在freemarker.core.DynamicKeyName ._getAsTemplateModel(DynamicKeyName.java:90)
at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
at freemarker.core.Expression.getStringValue(Expression.java:93)
在freemarker.core.DollarVariable.acce pt(DollarVariable.java:76)
freemarker.core.Environment.visit(Environment.java:210)
freemarker.core.MixedContent.accept(MixedContent.java:92)
在freemarker.core.Environment.visit(Environment.java:210)
在freemarker.core.IfBlock.accept(IfBlock.java:82)
在freemarker.core.Environment.visit(Environment.java :210)
freemarker.core.IfBlock.accept(IfBlock.java:82)
freemarker.core.Environment.visit(Environment.java:210)
freemarker.core。 MixedContent.accept(MixedContent.java:92)
freemarker.core.Environment.visit(Environment.java:210)
freemarker.core.Environment.process(Environment.java:190)
在freemarker.template.Template.process(Template.java:237)
在org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:748)
在org.apache.struts2 .dispatcher.Dispatcher.serviceAction(Dispatcher.java:505)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apa che.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
。在组织。 apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
处org.apache.catalina org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
。 core.StandardContextValve.invoke(StandardContextValve.java:191)
处org.apache.catalina.valves.ErrorReportValve org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
。在调用在org.apache.catalina.connector.CoyoteAdapter.service org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
(ErrorReportValve.java:102)
(CoyoteAdapter。 java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler。进程(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread。 java:636)
引起:java.lang.NullPointerException
在freemarker.ext.beans.SimpleMemberModel.unwrapArguments(SimpleMemberModel.java:85)
在freemarker.ext.beans.SimpleMethodModel。 exec(SimpleMethodModel.java:106)
... 33 more

任何人都有想法用Hibernate 3和Struts 2实现jasypt还是可以帮我解决这个错误? (我必须使用jasypt)

没关系,问题是映射中的加密器注册名称:

 < param name =encryptorRegisteredName> strongHibernateEncryptor< / param> 

当我注册它时,我会在名称中添加String:

  registry.registerPBEStringEncryptor(strongHibernateStringEncryptor,strongEncryptor); 

必须设置密码:

  strongEncryptor.setPassword( aStrongPassword); 

现在不再有错误。

(我编辑上面的代码以反映更改)


I'm trying to encrypt passwords in a webapp using Jasypt with hibernate 3. I followed the instructions on the jasypt website.

Here's my hibernate mapping :

<hibernate-mapping package="webapp.entity">

  <typedef name="encrypted" class="org.jasypt.hibernate.type.EncryptedStringType">
    <param name="encryptorRegisteredName">strongHibernateStringEncryptor</param>
  </typedef>

  <class name="User" table="Users">
    <id name="name"
      column="name"
      type="string">
    </id>

    <property name="passwd"
      column="passwd"
      type="encrypted"
      not-null="true">
    </property>

  </class>

</hibernate-mapping>

Now I register the encryptor each time I open a session with hibernate :

public void initHibSession() {
    HibernateUtil.buildSessionFactory();
    hib_session = HibernateUtil.getSessionFactory().getCurrentSession();
    if (hib_session != null && hib_session.isOpen()) {
        hib_session.close();
        hib_session = HibernateUtil.getSessionFactory().openSession();
    }
    hib_session.beginTransaction();

    StandardPBEStringEncryptor strongEncryptor = new StandardPBEStringEncryptor();
    strongEncryptor.setPassword("aStrongPassword");
    HibernatePBEEncryptorRegistry registry = HibernatePBEEncryptorRegistry.getInstance();
    registry.registerPBEStringEncryptor("strongHibernateStringEncryptor", strongEncryptor);
}

Then, each time I try to access a user, this exception is thrown :

FreeMarker template error!

Method public java.lang.String  org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int) threw an       exception when invoked on org.jasypt.exceptions.EncryptionInitializationException: No string encryptor registered for hibernate with name "strongHibernateEncryptor"
The problematic instruction:
----------
==&gt; ${msgs[0][0]} [on line 76, column 25 in org/apache/struts2/dispatcher/error.ftl]
----------

Java backtrace for programmers:
----------
freemarker.template.TemplateModelException: Method public java.lang.String  org.apache.commons.lang.exception.NestableRuntimeException.getMessage(int) threw an exception when invoked on org.jasypt.exceptions.EncryptionInitializationException: No string encryptor registered for hibernate with name "strongHibernateEncryptor"
at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:130)
at freemarker.ext.beans.SimpleMethodModel.get(SimpleMethodModel.java:138)
at freemarker.core.DynamicKeyName.dealWithNumericalKey(DynamicKeyName.java:111)
at freemarker.core.DynamicKeyName._getAsTemplateModel(DynamicKeyName.java:90)
at freemarker.core.Expression.getAsTemplateModel(Expression.java:89)
at freemarker.core.Expression.getStringValue(Expression.java:93)
at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.IfBlock.accept(IfBlock.java:82)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.IfBlock.accept(IfBlock.java:82)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.MixedContent.accept(MixedContent.java:92)
at freemarker.core.Environment.visit(Environment.java:210)
at freemarker.core.Environment.process(Environment.java:190)
at freemarker.template.Template.process(Template.java:237)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:748)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:505)
at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Thread.java:636)
Caused by: java.lang.NullPointerException
at     freemarker.ext.beans.SimpleMemberModel.unwrapArguments(SimpleMemberModel.java:85)
at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:106)
... 33 more

Anybody have an idea for implementing jasypt with Hibernate 3 and Struts 2 or can help me with this error ? (I have to use jasypt)

解决方案

It's ok, the problem was the encryptor registered name in the mapping :

<param name="encryptorRegisteredName">strongHibernateEncryptor</param>

When I registered it, I add "String" in the name :

registry.registerPBEStringEncryptor("strongHibernateStringEncryptor", strongEncryptor);

Have to set a password too :

strongEncryptor.setPassword("aStrongPassword");

No more error now.

(I edit my code above to reflect the changes)

这篇关于Hibernate 3和Struts 2实现Jasypt时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆