目标
- 实现用户登录
- 实现用户登出
- 实现用户登录拦截
实现用户登录
- jsp中编写表单来接受数据
<!-- 提交后的位置:/WEB-INF/jsp/index_xx.jsp -->
<form action="${pageContext.request.contextPath }/login.action" method="post"
onsubmit="return check()" id="loginForm">
账号:<input type="text" name="userAcc" id="userAcc" /> <br><br>
密码:<input type="password" name="userPwd" id="userPwd" /> <br><br>
身份:<select id="userId" name="userId">
<option value="1">管理员</option>
<option value="2">专业负责人</option>
<option value="3">班主任</option>
<option value="4">教师</option>
<option value="5">辅导员</option>
<option value="6">秘书</option>
<option value="7">学生</option>
</select><br>
<font color="red" size="1px">
<!-- 提示信息 -->
<span id="message">${msg}</span>
</font><br/>
<button type="submit">登录</button>
</form>
- 前端验证代码
/* 判断是登录账号和密码是否为空 */
function check(){
var userAcc = $("#userAcc").val();
var userPwd = $("#userPwd").val();
if(userAcc==""||userPwd==""){
$("#message").text("账号或密码不能为空!");
return false;
}
return true;
}
- 后端控制层代码
/**
* 用户登录
*/
@RequestMapping(value = "/login.action",method = RequestMethod.POST)
public String login(String userAcc,String userPwd,String userId,Model model,HttpSession session) {
//通过账号和密码查询用户
User user = userService.findUser(userAcc,userPwd);
//判断用户是否存在
if(user!=null) {
//判断用户是否有权限
if(user.getUserId().contains(userId)) {
//将用户对象添加到Session
session.setAttribute("USER_SESSION", user);
//通过用户Id得到要跳转的页面
String userIndex = getUserIndex(userId);
return "redirect:"+userIndex;
}
model.addAttribute("msg","你没有该用户组的权限,请重新选择用户组!");
return "login";
}
model.addAttribute("msg","账号或密码错误,请重新输入!");
return "login";
}
- 用到的Service层方法
/**
* 通过账号和密码查询用户
*/
@Override
public User findUser(String userAcc, String userPwd) {
return userDao.findUser(userAcc,userPwd);
}
- 用到的Dao层方法
/**
* 通过账号和密码查询用户
* @param userAcc
* @param userPwd
* @return
*/
User findUser(@Param("userAcc")String userAcc, @Param("userPwd")String userPwd);
<!-- 通过账号和密码查询用户 -->
<select id="findUser" parameterType="String" resultType="user">
select * from tb_user
where userAcc = #{userAcc} and userPwd=#{userPwd}
</select>
- 功能演示
用户登录
实现用户登出
- 在主页jsp中编写登出按钮
<a class="exit" href="${pageContext.request.contextPath }/logout.action" style="font-size:25px;">⇠</a>
- 后端控制层代码
/**
* 退出登录
*/
@RequestMapping(value = "/logout.action")
public String logout(HttpSession session) {
//清除session
session.invalidate();
//重定向到登录页面的跳转方法
return "redirect:login.action";
}
/**
* 向用户登录页面跳转
* @return
*/
@RequestMapping(value = "/login.action",method = RequestMethod.GET)
public String login() {
return "login";
}
- 功能演示
用户登出
实现用户登录拦截
package com.stuos.core.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.stuos.core.po.User;
/**
* 登录拦截器
*
*
*/
public class LoginInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
//获取请求的URL
String url = request.getRequestURI();
//url:除了登录请求外,其他的URL都进行拦截控制
if(url.indexOf("/login.action")>=0) {
return true;
}
//获取Session
HttpSession session = request.getSession();
User user = (User) session.getAttribute("USER_SESSION");
//判断Session中是否有用户数据,如果有返回TRUE,继续向下执行
if(user!=null) {
return true;
}
//不符合条件的给出提示信息,并转发到登录页面
request.setAttribute("msg", "您还没有登录,请先登录!");
request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response);
return false;
}
}
功能演示
登陆拦截