0

atmがわからない問題です。ユーザーテーブルを介してログインを処理する休止状態があります。アプリの実行中にこのテーブルが操作された場合、ログイン側で変更は行われません (ただし、テーブルでは変更が行われますが、私はそのために ZK を使用しており、変更を正しく確認できます)。したがって、次のようにログインすると: 管理者パスワード

次に、パスワードを newpassword に変更します

ログインの変更が行われる前に、アプリをクリーンアップしてビルドし、実行する必要があります。言い換えれば、ユーザーテーブルのデータを一度だけチェックして、どこかに保持していると思いますか?

とにかく私が役立つと思うコード:

applicationContext-security.xml のスニペット

<beans:bean id="sesFactory"
  class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <beans:property name="configLocation">
        <beans:value>classpath:\hibernate.cfg.xml</beans:value>
    </beans:property>
</beans:bean>

<beans:bean id="userDAO" class="login.UserLoginDAOImpl">
            <beans:property name="sessionFactory" ref="sesFactory"></beans:property>
</beans:bean>

<beans:bean id="userService" class="login.UserLoginService">
    <beans:property name="userDAO" ref="userDAO"></beans:property>
</beans:bean> 

<authentication-manager>
     <authentication-provider user-service-ref="userService">
        <!--<password-encoder hash="sha" />-->
     </authentication-provider>      
</authentication-manager>

hibernation.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
 "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
    <!-- Database connection settings -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">admin</property>

    <!-- JDBC connection pool (use the built-in) -->
    <property name="connection.pool_size">1</property>


     <!-- Enable Hibernate's automatic session context management -->
    <property name="current_session_context_class">thread</property>

    <!-- Disable the second-level cache -->
    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>


    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>



    <mapping class="contacts.Contacts" />
    <mapping class="login.Users" />
</session-factory>
</hibernate-configuration>

UserLoginDaoImpl:

 /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
  package login;


import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.HibernateTemplate;

/**
 * The Class UserLoginDAOImpl
 */
public class UserLoginDAOImpl implements UserLoginDAO {

/** The hibernate template. */
private HibernateTemplate hibernateTemplate;

/**
 * Sets the session factory.
 * 
 * @param sessionFactory
 *            the new session factory
 */
public void setSessionFactory(SessionFactory sessionFactory) {
    this.hibernateTemplate = new HibernateTemplate(sessionFactory);
}

@Override
public Users loadUserByName(String name) {
    if (name != null && !name.equals("")) {

        List<Users> usr = hibernateTemplate
                .find("from Users where username ='" + name + "'");
                        System.out.println(usr.get(0));
        if (usr.size() == 1) {
            return usr.get(0);
        } else {
                        System.out.println("USER SIZE IS INCORRECT");
            return null;

        }
    } else {
        return null;
    }
}
}
4

1 に答える 1

0

私は決して Hibernate の専門家ではありませんが、

<property name="current_session_context_class">thread</property>

行は不要であり、トランザクション マネージャーの動作に影響します:春、休止状態、および宣言型トランザクションの実装を参照してください: アクティブなトランザクションはありません

PS Spring は AnnotationSessionFactoryBean を介してトランザクションを管理し、UserLoginDAOImpl および UserLoginService クラス内で何か興味深いことが起こる可能性があります。

于 2012-08-12T20:05:50.107 に答える