Spring MVC,拦截器实现session控制

本文基于Spring MVC 注解,让Spring跑起来

未登录,不允许访问background文件夹内的页面,那如何判断是否登录呢?background是关键目录,每个操作该目录的人都需要写在日志表中,如何实现呢?拦截器是实现方案之一。

(1) 在com.geloin.spring.interceptor包中添加SystemInterceptor,并使其继承HandlerInterceptor

  1. /**
  2. *
  3. * @author geloin
  4. * @date 2012-3-27 下午2:29:35
  5. */
  6. package com.geloin.spring.interceptor;
  7. import java.io.PrintWriter;
  8. import java.util.Iterator;
  9. import java.util.Map;
  10. import javax.annotation.Resource;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import org.springframework.stereotype.Repository;
  14. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
  15. import com.embest.ruisystem.form.SystemLoggerForm;
  16. import com.embest.ruisystem.form.SystemUserForm;
  17. import com.embest.ruisystem.service.SystemLoggerService;
  18. import com.embest.ruisystem.util.Constants;
  19. import com.embest.ruisystem.util.DataUtil;
  20. /**
  21. *
  22. * @author geloin
  23. * @date 2012-3-27 下午2:29:35
  24. */
  25. @Repository
  26. public class SystemInterceptor extends HandlerInterceptorAdapter {
  27. @Resource(name = "systemLoggerService")
  28. private SystemLoggerService systemLoggerService;
  29. /*
  30. * (non-Javadoc)
  31. *
  32. * @see
  33. * org.springframework.web.servlet.handler.HandlerInterceptorAdapter#preHandle
  34. * (javax.servlet.http.HttpServletRequest,
  35. * javax.servlet.http.HttpServletResponse, java.lang.Object)
  36. */
  37. @SuppressWarnings({ "rawtypes", "unchecked" })
  38. @Override
  39. public boolean preHandle(HttpServletRequest request,
  40. HttpServletResponse response, Object handler) throws Exception {
  41. request.setCharacterEncoding("UTF-8");
  42. response.setCharacterEncoding("UTF-8");
  43. response.setContentType("text/html;charset=UTF-8");
  44. // 后台session控制
  45. String[] noFilters = new String[] { "login.html", "veriCode.html",
  46. "index.html", "logout.html" };
  47. String uri = request.getRequestURI();
  48. if (uri.indexOf("background") != -1) {
  49. boolean beFilter = true;
  50. for (String s : noFilters) {
  51. if (uri.indexOf(s) != -1) {
  52. beFilter = false;
  53. break;
  54. }
  55. }
  56. if (beFilter) {
  57. Object obj = request.getSession().getAttribute(
  58. Constants.LOGINED);
  59. if (null == obj) {
  60. // 未登录
  61. PrintWriter out = response.getWriter();
  62. StringBuilder builder = new StringBuilder();
  63. builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");
  64. builder.append("alert(\"页面过期,请重新登录\");");
  65. builder.append("window.top.location.href=\"");
  66. builder.append(Constants.basePath);
  67. builder.append("/background/index.html\";</script>");
  68. out.print(builder.toString());
  69. out.close();
  70. return false;
  71. } else {
  72. // 添加日志
  73. String operateContent = Constants.operateContent(uri);
  74. if (null != operateContent) {
  75. String url = uri.substring(uri.indexOf("background"));
  76. String ip = request.getRemoteAddr();
  77. Integer userId = ((SystemUserForm) obj).getId();
  78. SystemLoggerForm form = new SystemLoggerForm();
  79. form.setUserId(userId);
  80. form.setIp(ip);
  81. form.setOperateContent(operateContent);
  82. form.setUrl(url);
  83. this.systemLoggerService.edit(form);
  84. }
  85. }
  86. }
  87. }
  88. Map paramsMap = request.getParameterMap();
  89. for (Iterator<Map.Entry> it = paramsMap.entrySet().iterator(); it
  90. .hasNext();) {
  91. Map.Entry entry = it.next();
  92. Object[] values = (Object[]) entry.getValue();
  93. for (Object obj : values) {
  94. if (!DataUtil.isValueSuccessed(obj)) {
  95. throw new RuntimeException("有非法字符:" + obj);
  96. }
  97. }
  98. }
  99. return super.preHandle(request, response, handler);
  100. }
  101. }
/**
 *
 * @author geloin
 * @date 2012-3-27 下午2:29:35
 */
package com.geloin.spring.interceptor;

import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Map;

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

import org.springframework.stereotype.Repository;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.embest.ruisystem.form.SystemLoggerForm;
import com.embest.ruisystem.form.SystemUserForm;
import com.embest.ruisystem.service.SystemLoggerService;
import com.embest.ruisystem.util.Constants;
import com.embest.ruisystem.util.DataUtil;

/**
 * 
 * @author geloin
 * @date 2012-3-27 下午2:29:35
 */
@Repository
public class SystemInterceptor extends HandlerInterceptorAdapter {

	@Resource(name = "systemLoggerService")
	private SystemLoggerService systemLoggerService;

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.springframework.web.servlet.handler.HandlerInterceptorAdapter#preHandle
	 * (javax.servlet.http.HttpServletRequest,
	 * javax.servlet.http.HttpServletResponse, java.lang.Object)
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {

		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");

		// 后台session控制
		String[] noFilters = new String[] { "login.html", "veriCode.html",
				"index.html", "logout.html" };
		String uri = request.getRequestURI();

		if (uri.indexOf("background") != -1) {
			boolean beFilter = true;
			for (String s : noFilters) {
				if (uri.indexOf(s) != -1) {
					beFilter = false;
					break;
				}
			}
			if (beFilter) {
				Object obj = request.getSession().getAttribute(
						Constants.LOGINED);
				if (null == obj) {

					// 未登录
					PrintWriter out = response.getWriter();
					StringBuilder builder = new StringBuilder();
					builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");
					builder.append("alert(\"页面过期,请重新登录\");");
					builder.append("window.top.location.href=\"");
					builder.append(Constants.basePath);
					builder.append("/background/index.html\";</script>");
					out.print(builder.toString());
					out.close();
					return false;
				} else {
					// 添加日志
					String operateContent = Constants.operateContent(uri);
					if (null != operateContent) {
						String url = uri.substring(uri.indexOf("background"));
						String ip = request.getRemoteAddr();
						Integer userId = ((SystemUserForm) obj).getId();
						SystemLoggerForm form = new SystemLoggerForm();
						form.setUserId(userId);
						form.setIp(ip);
						form.setOperateContent(operateContent);
						form.setUrl(url);
						this.systemLoggerService.edit(form);
					}
				}
			}
		}

		Map paramsMap = request.getParameterMap();

		for (Iterator<Map.Entry> it = paramsMap.entrySet().iterator(); it
				.hasNext();) {
			Map.Entry entry = it.next();
			Object[] values = (Object[]) entry.getValue();
			for (Object obj : values) {
				if (!DataUtil.isValueSuccessed(obj)) {
					throw new RuntimeException("有非法字符:" + obj);
				}
			}
		}

		return super.preHandle(request, response, handler);
	}

}


(2) 修改context-dispatcher.xml,让spring管理拦截器

  1. <mvc:interceptors>
  2. <bean class="com.geloin.spring.interceptor.SystemInterceptor" />
  3. </mvc:interceptors>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值