0

メモリ内のxmlユーザー名/パスワードを使用して認証すると機能するため、プロジェクトの次の段階はデータベースに対して認証することでした。これは私が永続的な問題を思いつくところです。何日も経ちました。

mysql dbに挿入したユーザー名であるデータベースb/cに少なくとも接続していることを示すコンソールの出力。

  loadUserByUsername  :  ed23

ただし、認証する代わりに、ユーザー名/パスワードが正しい場合でも、ログイン失敗ページが返されます。

セキュリティ XML

   <global-method-security pre-post-annotations="enabled" />

   <http auto-config="true" use-expressions="true" access-denied-page="/denied">


    <intercept-url pattern='/main/home.jsp' access="hasRole('ROLE_USER')" /> 
    <intercept-url pattern='/admin/admin.jsp' access="hasRole('ROLE_ADMIN')" />

    <form-login login-page='/login.jsp' always-use-default-target="true" default-

  target-url="/main/home" authentication-failure-url="/login_error.jsp?error=true"/>   

    <logout invalidate-session="true" logout-success-url='/login.jsp' /> 



  </http>

  <!-- authentication manager and password hashing -->
    <authentication-manager alias="authenticationManager">
        <authentication-provider ref="daoAuthenticationProvider"/>
 </authentication-manager>

  <beans:bean id="daoAuthenticationProvider" 

  class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
  <beans:property name="userDetailsService" ref="userDetailsService"/>
  <beans:property name="saltSource">
    <beans:bean 

   class="org.springframework.security.authentication.dao.ReflectionSaltSource">
        <beans:property name="userPropertyToUse" value="username"/>
    </beans:bean>
 </beans:property>
 <beans:property name="passwordEncoder" ref="passwordEncoder"/>
 </beans:bean>

 <beans:bean id="userDetailsService"    

 class="com.project.professional.service.StaffServiceImpl">

  </beans:bean>

 <beans:bean id="passwordEncoder" 

 class="org.springframework.security.authentication.encoding.ShaPasswordEncoder">
 <beans:constructor-arg index="0" value="256"/>
 </beans:bean>

ログインjsp

     <form action="${loginUrl}" method="post" name="loginForm">

    <p>
    <label for="j_username">Username</label>
    <input id="j_username" name="j_username" type="text" />
    </p>

    <p>
    <label for="j_password">Password</label>
    <input id="j_password" name="j_password" type="password" />
    </p>

   <input  type="submit  

   value="Login"/>                              

    </form>

コントローラ

    @RequestMapping(value = "/main/home", method = RequestMethod.GET)
public String getHomePage(Locale locale, Model model) {

    return "/main/home";
}

@RequestMapping(value="/", method = RequestMethod.GET)
public String getLoginPage(ModelMap model) {
    logger.info("This is the login page {}.");

    return "login";

}

ユーザー詳細の実装

       public UserDetails loadUserByUsername(String username)
            throws UsernameNotFoundException {
        System.out.println("loadUserByUsername  :  " + username);
        //DAO<Staff> sessionFactory = null;
        Session session = sessionFactory.getCurrentSession();

        username = (username == null) ? "" : username;
        Query query = session
            .createQuery("from Staff where username=:username");
        query.setParameter("username", username);

        if (query.list().isEmpty()) {
            return null;
        }

        return (UserDetails) query.list().get(0);

    }


       public Staff getStaffDetails(String username) {
       Session session = sessionFactory.getCurrentSession();
    Query query = session.createQuery("from Staff where username=:username");
    query.setParameter("username", username);

    if (query.list().isEmpty()) {
        return null;
    }
    return (Staff) query.list().get(0);

ナビゲーション バーからページにアクセスできますが、ログイン ページから認証された場合にのみアクセスできるように保護することはできません。助けていただければ幸いです。

4

1 に答える 1

0

HTTP ステータス 404

ページが見つからないことを意味します。これは、1) ページが存在しない場合に発生する可能性があります。(これは最も可能性が高いです)2)サーバーが正しく起動されていません(その場合は気付いていたので、私は疑問に思っています)

login_error.jspそのため、ページの場所を確認することをお勧めします。あなたが望んでいた正しい場所にないかもしれません。

于 2013-04-30T08:44:08.647 に答える