springMvc拦截器,全局异常配置,cookie保存用户登录信息

springMvc配置文件添加

<!-- 拦截器配置 -->
	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/**"></mvc:mapping>
 			<mvc:exclude-mapping path="/login/doLogin.do"/>		
			<bean class="com.springmvc.base.SecurityInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>
<!-- 全局异常 -->
	<bean
		class="com.springmvc.exception.HandlerExceptionResolverImpl">
		<!-- 定义默认的异常处理页面 -->
		<property name="defaultErrorView" value="error" />
		<!-- 定义异常处理页面用来获取异常信息的变量名,如果不添加exceptionAttribute属性,则默认为exception -->
		<property name="exceptionAttribute" value="exception" />
		<!-- 定义需要特殊处理的异常,用类名或完全路径名作为key,异常页面名作为值 -->
		<property name="exceptionMappings">
			<props>
				<prop key="Exception">jsp/error.jsp</prop>
				<!-- <prop key="java.sql.SQLException">error/sql.jsp</prop> -->
			</props>
		</property>
	</bean>

 

java后台代码:

LoginController.java

package com.springmvc.controller;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.springmvc.base.BaseController;
import com.springmvc.base.Md5Util;
import com.springmvc.exception.MyException;
import com.springmvc.model.UserAdmin;
import com.springmvc.service.UserAdminService;

@Controller
@RequestMapping("/login")
public class LoginController extends BaseController {

	private final Logger logger = Logger.getLogger(this.getClass());
	@Autowired
	private UserAdminService userAdminService;

	@RequestMapping("/doLogin.do")
	@ResponseBody
	public String doLogin(String userName, String password, String remPwd, HttpServletResponse response) throws MyException {
		logger.info("登录:" + userName + ":" + password);
		UserAdmin admin = new UserAdmin();
		admin.setName(userName);
		admin = userAdminService.queryUserAdmin(admin);
		if (null != admin && admin.getPassword().equals(Md5Util.encode(password))) {
			setSessionUser(admin);
			setCookieUser(userName, password, remPwd, response);
			return "success";
		}

		return "error";
	}

	@RequestMapping("/openIndex.do")
	public Object openIndex() {

		return "index";
	}

	@RequestMapping("/add.do")
	@ResponseBody
	public Object add(UserAdmin adminParam) {

		try {
			userAdminService.addUserAdmin(adminParam);
		} catch (Exception e) {
			e.printStackTrace();
		}

		return adminParam;
	}

	public void setCookieUser(String userName, String password, String remberPwd, HttpServletResponse response) {
		// 将用户名密码保存在cookie中
		if ("true".equals(remberPwd)) {
			Cookie cookieUser = new Cookie("cookie_user", userName + "-" + password);
			// 设定有效时间 以秒(s)为单位
			cookieUser.setMaxAge(7 * 24 * 60 * 60);
			// 设置Cookie路径和域名
			cookieUser.setPath("/");
			response.addCookie(cookieUser);
		} else {
			Cookie cookieUser = new Cookie("cookie_user", null);
			// 设定有效时间 以秒(s)为单位
			cookieUser.setMaxAge(0);
			// 设置Cookie路径和域名
			cookieUser.setPath("/");
			response.addCookie(cookieUser);
		}
	}

	public static void main(String[] args) {
		System.out.println(Md5Util.encode("123456"));
		System.out.println("true".equals(null));
	}
}

 

BaseController.java

package com.springmvc.base;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;

import com.springmvc.model.UserAdmin;

public class BaseController {

	public final static String SESSION_USER = "userAdmin";
	@Autowired
	private HttpServletRequest request;
	@Autowired
	private HttpServletResponse response;

	public void setSessionUser(UserAdmin admin) {
		request.getSession(true).setAttribute(SESSION_USER, admin);

	}

	public UserAdmin getSessionUser() {
		return (UserAdmin) request.getSession().getAttribute(SESSION_USER);
	}

	public void setRequestAttr(String key, Object value) {
		request.setAttribute(key, value);
	}

	/**
	 * 传入时间参数处理
	 * 
	 * @param binder
	 */
	@InitBinder
	public void initBinder(WebDataBinder binder) {
		binder.registerCustomEditor(Date.class, new DateEditor());
	}

}

 

DateEditor.java

package com.springmvc.base;

import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.lang.StringUtils;

public class DateEditor extends PropertyEditorSupport {
	@Override
	public void setAsText(String text) throws IllegalArgumentException {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date date = null;
		if(StringUtils.isBlank(text)){
			return;
		}
		try {
			date = format.parse(text);
		} catch (ParseException e) {
			format = new SimpleDateFormat("yyyy-MM-dd");
			try {
				date = format.parse(text);
			} catch (ParseException e1) {
				e1.printStackTrace();
			}
		}
		setValue(date);
	}
}

JsonDateFormatFull.java

package com.springmvc.base;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

public class JsonDateFormatFull extends JsonSerializer<Date> {
	
	/**
	 * jackson返回序列化时间格式
	 */
	@Override
	public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws

	IOException, JsonProcessingException {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String formattedDate = formatter.format(value);
		jgen.writeString(formattedDate);

	}

}

Md5Util.java

package com.springmvc.base;

import java.security.MessageDigest;

public class Md5Util {

	public final static String encode(String s) {
		char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
		try {
			byte[] btInput = s.getBytes();
			// 获得MD5摘要算法的 MessageDigest 对象
			MessageDigest mdInst = MessageDigest.getInstance("MD5");
			// 使用指定的字节更新摘要
			mdInst.update(btInput);
			// 获得密文
			byte[] md = mdInst.digest();
			// 把密文转换成十六进制的字符串形式
			int j = md.length;
			char str[] = new char[j * 2];
			int k = 0;
			for (int i = 0; i < j; i++) {
				byte byte0 = md[i];
				str[k++] = hexDigits[byte0 >>> 4 & 0xf];
				str[k++] = hexDigits[byte0 & 0xf];
			}
			return new String(str);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

}

Result.java

package com.springmvc.base;

import java.io.Serializable;

public class Result<T> implements Serializable {

	private static final long serialVersionUID = -744302740539442970L;

	private String code = "200";
	private String msg = "success";
	private T data;

	public String getCode() {
		return code;
	}

	public String getMsg() {
		return msg;
	}

	public T getData() {
		return data;
	}

	public Result() {

	}

	public Result(T data) {
		this.data = data;
	}

	public Result(String code, String msg) {
		this.code = code;
		this.msg = msg;
	}

	public Result(String code, String msg, T data) {
		this.code = code;
		this.msg = msg;
		this.data = data;
	}

}

SecurityInterceptor.java

package com.springmvc.base;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.springmvc.model.UserAdmin;

/**
 * 自定义拦截器
 * @author Administrator
 *
 */
public class SecurityInterceptor extends HandlerInterceptorAdapter {

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		super.afterCompletion(request, response, handler, ex);
	}

	@Override
	public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		// TODO Auto-generated method stub
		super.afterConcurrentHandlingStarted(request, response, handler);
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		super.postHandle(request, response, handler, modelAndView);
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		
		HttpSession session = request.getSession(true);
		UserAdmin userAdmin = (UserAdmin) session.getAttribute(BaseController.SESSION_USER);
		// session 用户是否登陆
		if (null == userAdmin) {
			response.sendRedirect(request.getContextPath() + "/login.jsp?msg=no_login");
			return false;
		}
		return true;
	}

	
	
}

HandlerExceptionResolverImpl.java

package com.springmvc.exception;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.SimpleMappingExceptionResolver;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.springmvc.base.Result;

public class HandlerExceptionResolverImpl extends SimpleMappingExceptionResolver {
	private final static Logger logger = Logger.getLogger(HandlerExceptionResolverImpl.class);

	@Override
	protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
			Exception ex) {
		logger.error(ex.getMessage(), ex);
		String viewName = determineViewName(ex, request);

		if (viewName != null) {

			if ((request.getHeader("accept") != null) && (!(request.getHeader("accept").indexOf("application/json") > -1
					|| (request.getHeader("X-Requested-With") != null
							&& request.getHeader("X-Requested-With").indexOf("XMLHttpRequest") > -1)))) {

				Integer statusCode = determineStatusCode(request, viewName);
				if (statusCode != null) {
					applyStatusCodeIfPossible(request, response, statusCode);
				}
				return getModelAndView(viewName, ex, request);
			} else {
				PrintWriter writer = null;
				try {
					response.setCharacterEncoding("utf-8");
					response.setContentType("application/json;charset=utf-8");
					writer = response.getWriter();
					//
					ObjectMapper mapper = new ObjectMapper();
					if (ex instanceof MyException) {
						writer.write(mapper.writeValueAsString(new Result("500", ex.getMessage())));
					} else {
						writer.write(mapper.writeValueAsString(new Result("500", ex.getMessage())));
					}
					writer.flush();
				} catch (IOException e) {
					logger.error(e.getMessage(), e);
				} finally {
					writer.close();
				}
				return null;
			}
		} else {
			return null;
		}

	}

}

MyException.java

package com.springmvc.exception;

public class MyException extends Exception {

	/**
	 * 
	 */
	private static final long serialVersionUID = 3627645256433923779L;

	private String code;
	private String msg;

	public String getCode() {
		return code;
	}

	public String getMsg() {
		return msg;
	}

	public MyException(String code, String msg) {
		super(msg);
		this.code = code;
		this.msg = msg;
	}

	public MyException(String code, String msg, Throwable cause) {
		super(msg, cause);
		this.code = code;
		this.msg = msg;
	}
}

UserAdminDao.java

package com.springmvc.mapper;

import java.sql.SQLException;
import java.util.List;

import com.springmvc.model.UserAdmin;

public interface UserAdminDao {

	public List<UserAdmin> queryUserAdmin(UserAdmin userAdmin) throws SQLException;

	public void addUserAdmin(UserAdmin userAdmin) throws SQLException;
}

UserAdmin-mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.springmvc.mapper.UserAdminDao">
	<select id="queryUserAdmin" parameterType="userAdmin" resultType="userAdmin">
		select * from user_admin where name=#{name,jdbcType=VARCHAR}
	</select>
	
	<insert id="addUserAdmin" parameterType="userAdmin">
		INSERT INTO user_admin
		VALUES(#{id,jdbcType=INTEGER},
				#{name,jdbcType=VARCHAR},
				#{password,jdbcType=VARCHAR},
				#{createDate,jdbcType=DATE}
		)
		<selectKey resultType="java.lang.Long"  order="AFTER" keyProperty="id" >
        	SELECT LAST_INSERT_ID() AS id   
      	</selectKey>
		
	</insert>
	
</mapper>

UserAdmin.java

package com.springmvc.model;

import java.io.Serializable;
import java.util.Date;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.springmvc.base.JsonDateFormatFull;

public class UserAdmin implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 781180555149448774L;

	private Long id;
	private String name;
	private String password;
	private Date createDate;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
	
	@JsonSerialize(using = JsonDateFormatFull.class)
	public Date getCreateDate() {
		return createDate;
	}

	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}

}

UserAdminService.java

package com.springmvc.service;

import com.springmvc.exception.MyException;
import com.springmvc.model.UserAdmin;

public interface UserAdminService {

	public UserAdmin queryUserAdmin(UserAdmin userAdmin)throws MyException;

	public UserAdmin addUserAdmin(UserAdmin userAdmin)throws Exception;
	
	public UserAdmin testtx(UserAdmin userAdmin)throws Exception;
}

UserAdminServiceImpl.java

package com.springmvc.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import com.springmvc.exception.MyException;
import com.springmvc.mapper.UserAdminDao;
import com.springmvc.model.UserAdmin;
import com.springmvc.service.UserAdminService;

@Service("userAdminService")
public class UserAdminServiceImpl implements UserAdminService {

	@Autowired
	private UserAdminDao userAdminDao;

	public UserAdmin queryUserAdmin(UserAdmin userAdmin) throws MyException {
		List<UserAdmin> list=null;
		try {
			System.out.println(1/0);
			list = userAdminDao.queryUserAdmin(userAdmin);
		} catch (Exception e) {
			throw new MyException("500", "查询用户错误", e);
		}
		return CollectionUtils.isEmpty(list) ? null : list.get(0);
	}

	public UserAdmin addUserAdmin(UserAdmin userAdmin) throws Exception {
		userAdminDao.addUserAdmin(userAdmin);
		return userAdmin;

	}

	public UserAdmin testtx(UserAdmin userAdmin) throws Exception {
		userAdminDao.queryUserAdmin(userAdmin);
		userAdminDao.addUserAdmin(userAdmin);
		return userAdmin;
	}
	
}

jsp前端页面

login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<html>
<head>
<link rel="stylesheet" href="<%=path %>/bootstrap/css/bootstrap.min.css">
	<title>登陆</title>
</head>
<body>
<h2>登陆</h2>
	<div class="main" style="width: 20%;">
    	<div class="form-group">
    		<input class="form-control" id="userName" type="text"  placeholder="用户名"/>
    	</div>
        <div class="form-group">
        	<input class="form-control" id="userPwd" type="password"  placeholder="密码"/>
        </div>
         <div class="form-group">
        	<input class="form-control" id="date" type="date"/>
        </div>
       	<div class="form-group">
       		<label><input id="rem_pwd" type="checkbox" />记住密码</label>
       	</div>
        <div class="form-group">
        	<button id="login_btn" class="btn btn-primary" onclick="login()">登录</button>
        </div>
    </div>

</body>


</html>
<script type="text/javascript" src="<%=path %>/jquery-2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="<%=path %>/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript">
	function login(){
		var name=$('#userName').val(),
			password=$('#userPwd').val(),
			createDate=$('#date').val(),
			remPwd=$("#rem_pwd").prop("checked");;
		console.log(createDate)
		$.post("<%=path%>/login/doLogin.do",
				"userName="+name+"&password="+password+"&remPwd="+remPwd,
				function(res){
				if(res=="success")
					location.href="<%=path%>/login/openIndex.do";
					else alert(JSON.stringify(res));
				
		})
		
	}
	document.onkeydown=function(event){
          var e = event || window.event || arguments.callee.caller.arguments[0];
          if(e && e.keyCode==27){ // 按 Esc 
              //要做的事情
            }
          if(e && e.keyCode==113){ // 按 F2 
               //要做的事情
             }            
           if(e && e.keyCode==13){ // enter 键
              $('#login_btn').click();
          }
      }; 
      
   // 从cookie中获取用户名和密码
  	$(function(){
  		var cookies=document.cookie.split(";");
  		if(cookies){
  			for(var i in cookies){
  				var cookieArr=cookies[i].split('=');
  				if($.trim(cookieArr[0])=="cookie_user"){
  						$("#userName").val(cookieArr[1].split('-')[0]);
  						$("#userPwd").val(cookieArr[1].split('-')[1]);
  						$("#rem_pwd").prop("checked","checked");
  						return false;
  				}
  			}
  		}
  		
  	}); 
</script>

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>
<html>
<body>
<h2>Hello World!</h2>	


userName:${userAdmin.name } </br>
password:${userAdmin.password }
</body>
</html>

 

转载于:https://my.oschina.net/ludd79806329/blog/709333

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值