1. 程式人生 > >easyUI(四) -- SpringMVC+MyBatis怎麼驗證使用者名稱和密碼進行登入

easyUI(四) -- SpringMVC+MyBatis怎麼驗證使用者名稱和密碼進行登入

登入功能是通過使用者名稱和密碼來驗證資料庫是否存在這條資料以達到登入目的的一種方法。
使用SpringMVC實現登入功能有兩種方案。
第一種:傳入一個物件查詢資料庫
首先我們看看程式碼

實體

    private int userId;
    private String userName;
    private String password;
    private String userSex;
    private long phoneNum;
    private String heading;
    private String remark;
    private
int jurisDiction; private Date joinTime; private boolean isDel; private int dept; private int category;

Mybatis 的 Mapper.xml 檔案

<select id="queryForLogin" resultType="User"  resultMap="UserResultMapper">
        SELECT * FROM users  Where USERNAME = #{userName} AND PASSWORD = #{password}
</select> <resultMap type="User" id="UserResultMapper"> <id column="USERID" property="userId"/> <result column="HEADING" property="heading"/> <result column="JOINTIME" property="joinTime"/> <result column="ISDEL" property="isDel"/> <result
column="JURISDiction" property="jurisDiction"/> <result column="PASSWORD" property="password"/> <result column="PHONENUM" property="phoneNum"/> <result column="REMARK" property="remark"/> <result column="USERNAME" property="userName"/> <result column="USERSEX" property="userSex"/> <result column="DEPTID" property="dept"/> <result column="CATEGOYRID" property="category"/> <!-- <association property="dept" column="DEPTID" select="com.jacx.mapper.DeptMapper.queryById"></association> --> </resultMap>

編寫 resultMap 的時候要注意 , 如果你的資料庫和實體欄位是一樣的話 , Mybatis 會自己完成對映 。並且資料庫欄位忽略大小寫 。

public interface UserMapper {
    User queryForLogin(User user);
}

介面名稱要和 mapper 檔名稱一致
Service 的方法

public interface IUserService extends IBaseService<User>{
    User queryForLogin(User user);

}

service 實現類

    @Autowired
    private UserMapper userMapper;
    public User queryForLogin(String userName, String userPwd) {
        return userMapper.queryForLogin(userName, userPwd);
    }

可以看到我們在這裡傳入的是一個物件
接下來是 action 的方法

@Autowired
    private IUserService userService;

public String login(User user,HttpServletRequest request) {
        User u = userService.queryForLogin(user);
        if(u!=null){
            request.getSession().setAttribute("LOGIN_USER", u);
            return "dept/deptList";
        }
        //如果你直接返回一個字串 , 那麼它是返回本頁面的error.jsp頁面
        return "error";
    }

頁面程式碼

    <form action="${pageContext.request.contextPath }/index/login"
        method="post">
        <input type="text" id="userName" name="userName"> 
        <input type="password" id="password" name="password"> 
        <input type="submit" value="LOGIN">
    </form>

第二種:傳入 userName 和 password 登入 。
由於這種方法我們需要從頁面傳入兩個引數 , 但是 JAVA 在進行兩個引數傳值的時候 , 因為它不會儲存引數的實參 , 所以我們需要在 UserMapper 介面中給引數進行宣告

public interface UserMapper {
    List<User> queryAll(int offset,int limit);
    User queryForLogin(@Param("userName")String userName,@Param("password")String userPwd);
}

其他的程式碼將User user 替換成 String userName,String password 即可

要注意的是在 Action 中

    @Autowired
    private IUserService userService;

    @RequestMapping("login")
    public String login(String userName, String password,HttpServletRequest request) {
        User u = userService.queryForLogin(userName, password);
        if(u!=null){
            request.getSession().setAttribute("LOGIN_USER", u);
            return "dept/deptList";
        }
        return "error";

    }

我們傳入的引數要和 Jsp 頁面的 name 屬性裡的值一致 , 不然會找不到此屬性 , 或者不對應名稱傳入資料是空的

    <form action="${pageContext.request.contextPath }/index/login"
        method="post">
        <input type="text" id="userName" name="**userName**"> 
        <input type="password" id="password" name="**password**"> 
        <input type="submit" value="LOGIN">
    </form>