Hibernate 3和Struts 2实现Jasypt时出错 [英] Error implementing Jasypt with Hibernate 3 and Struts 2
问题描述
我试图使用Jasypt和hibernate 3加密webapp中的密码。我按照 这是我的hibernate映射: 现在我每次使用hibernate打开会话时注册加密器: 然后,每次尝试访问用户时,都会抛出以下异常: 任何人都有想法用Hibernate 3和Struts 2实现jasypt还是可以帮我解决这个错误? (我必须使用jasypt) 没关系,问题是映射中的加密器注册名称: 当我注册它时,我会在名称中添加String: 必须设置密码: 现在不再有错误。 (我编辑上面的代码以反映更改) 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 : Now I register the encryptor each time I open a session with hibernate : Then, each time I try to access a user, this exception is thrown : 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 : When I registered it, I add "String" in the name : Have to set a password too : No more error now. (I edit my code above to reflect the changes) 这篇关于Hibernate 3和Struts 2实现Jasypt时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
< 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>
type =encrypted
not-null =true>
< / property>
< / class>
< / hibernate-mapping>
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
< param name =encryptorRegisteredName> strongHibernateEncryptor< / param>
registry.registerPBEStringEncryptor(strongHibernateStringEncryptor,strongEncryptor);
strongEncryptor.setPassword( aStrongPassword);
<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>
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);
}
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:
----------
==> ${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
<param name="encryptorRegisteredName">strongHibernateEncryptor</param>
registry.registerPBEStringEncryptor("strongHibernateStringEncryptor", strongEncryptor);
strongEncryptor.setPassword("aStrongPassword");