2013-02-12 53 views
0

我目前正在使用spring mvc通过在一个小型数据库项目上工作自我教育,但我被困在登录验证的初始步骤。使用弹簧执行登录检查

package Spittles.dao; 

import java.sql.ResultSet; 
import java.sql.SQLException; 

import javax.sql.DataSource; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.jdbc.core.simple.ParameterizedRowMapper; 

import Spittles.services.LoginService; 
import SpringForm1.model.Spittler; 

public class SpittlerDao implements LoginService { 

    private DataSource dataSource; 
    private JdbcTemplate jdbcTemplate; 

    @Autowired 
    public void setDataSource(DataSource dataSource) 
    { 
     this.dataSource=dataSource; 
     this.jdbcTemplate=new JdbcTemplate(dataSource); 
    } 

    public Spittler checkSpittlerLogin(Spittler spittlerLogin) 
    { 
     String sql="SELECT * FROM spittler where spittler_email=? and spittler_password=?"; 
     return jdbcTemplate.queryForObject(sql,new ParameterizedRowMapper<Spittler>(){ 
       public Spittler mapRow(ResultSet rs,int rowNum) throws SQLException 
       { 
        Spittler spittler = new Spittler(); 
        spittler.setSpittler_name(rs.getString("spittler_name")); 
        spittler.setSpittler_email(rs.getString("spittler_email")); 
        spittler.setSpittler_email(rs.getString("spittler_id")); 
        return spittler; 
       } 
     },spittlerLogin.getSpittler_email(),spittlerLogin.getSpittler_password()); 
    } 


} 

和我的LoginController如下。

package SpringForm1.controller; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.servlet.ModelAndView; 

import Spittles.dao.SpittlerDao; 
import Spittles.services.LoginService; 
import SpringForm1.model.Spittler; 

@Controller 
public class LoginController { 

    @Autowired 
    private LoginService loginService; 

    @RequestMapping(value="/login.html",method=RequestMethod.GET) 

    public String loginPage(@ModelAttribute("loginData")Spittler spittler) 
    { 
     return "login"; 
    } 
    @RequestMapping(value="/logindo.html",method=RequestMethod.POST) 
    public String logindo(@ModelAttribute("loginData")Spittler spittler) 
    { 
     Spittler spittlerData = loginService.checkSpittlerLogin(spittler); 
     if(spittlerData!=null) 
     { 
      return "home"; 
     } 
     else 
     { 
      return "login"; 
     } 

    } 
} 

那么现在我面临的问题是,当柜面进入使用正确的电子邮件和密码,我重定向到主页面是desired.But的情况下,当电子邮件或密码不正确,我的要求就是要重定向回登录页面,但我得到以下异常。

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0 

那么可能是什么问题呢?我是新来的春天,所以任何建议都会教我一些新的东西 。

回答

1

你应该先检查行号。如果登录无效,结果集将为空。所以你必须首先检查结果集是否为空,然后抛出适当的异常。

0

愿这可以帮助..

你不需要的电子邮件和密码改回。所以,修改查询到Select count(*) from .... 这将返回10始终。在此基础上处理你的条件。

如果你想在你的项目中实现标准,那么使用自定义认证管理器来实现spring安全。