【JavaWeb】将普通项目变成ssm项目 03

目标

  • 实现用户登录
  • 实现用户登出
  • 实现用户登录拦截

实现用户登录

  1. 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>
  1. 前端验证代码
/* 判断是登录账号和密码是否为空 */
	function check(){
		var userAcc = $("#userAcc").val();
		var userPwd = $("#userPwd").val();
		if(userAcc==""||userPwd==""){
			$("#message").text("账号或密码不能为空!");
			return false;
		}
		return true;
	}
  1. 后端控制层代码
/**
	 * 用户登录
	 */
	@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";
	}
  1. 用到的Service层方法
/**
	 * 通过账号和密码查询用户
	 */
	@Override
	public User findUser(String userAcc, String userPwd) {
		return userDao.findUser(userAcc,userPwd);
	}
  1. 用到的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>
  1. 功能演示

用户登录

实现用户登出

  1. 在主页jsp中编写登出按钮
            <a class="exit" href="${pageContext.request.contextPath }/logout.action" style="font-size:25px;"></a>&nbsp;
  1. 后端控制层代码
	/**
	 * 退出登录
	 */
	@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";
	}
  1. 功能演示

用户登出

实现用户登录拦截

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

}

功能演示

登陆拦截

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冬泉旅人Winspr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值