【问题标题】:Spring Security Database authenticationSpring Security 数据库认证
【发布时间】:2013-04-24 02:46:36
【问题描述】:

当我使用内存中的 xml 用户名/密码进行身份验证时,它可以工作,因此我的项目的下一个阶段是针对数据库进行身份验证。这是我提出持久性问题的地方。已经好几天了。

控制台中的输出告诉我它至少连接到我的数据库 b/c,这是我在 mysql 数据库中插入的用户名。

  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);

我可以从导航栏访问这些页面,但我无法保护它,因此只有在登录页面经过身份验证后才能访问它们。我将不胜感激。

【问题讨论】:

    标签: database spring security


    【解决方案1】:

    HTTP 状态 404

    表示未找到该页面。当 1) 页面不存在时,可能会发生这种情况! (这是最有可能的)2)服务器没有正确启动(我怀疑,因为在那种情况下你会注意到)

    所以我建议您检查您的login_error.jsp 页面位置。它可能不在您想要的正确位置。

    【讨论】:

    • 我已经检查过了,jsp 是我想要的。我也可以手动访问它。但是当我使用正确的用户名/密码时,身份验证错误没有返回它或返回主页
    • 好的,我从 authentication-failure-url 中删除了 .jsp,现在它返回了自定义登录错误页面。但现在的问题是我使用的用户名/密码是正确的,但它不起作用。
    猜你喜欢
    • 2015-08-13
    • 2012-08-15
    • 2016-08-11
    • 2016-11-15
    • 2015-03-17
    • 2013-11-03
    • 1970-01-01
    • 2013-08-10
    • 2012-10-15
    相关资源
    最近更新 更多