SpringMvc登陆拦截器的基本使用

步骤一:编写一个拦截器类

import java.io.PrintWriter;
import java.util.List;

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

import org.apache.log4j.Logger;
import org.springframework.stereotype.Repository;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.base.utils.SessionName;

@Repository
public class SystemInterceptor extends HandlerInterceptorAdapter {
	//在配置文件中配置要放行的URL
	private List<String> paramList;
	Logger log = Logger.getLogger(SystemInterceptor.class);

	@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");
		HttpSession session = request.getSession();

		// 请求的虚拟目录
		String basePath = request.getContextPath();
		String requestPath = request.getServletPath();

		try {
			if (!requestPath.contains(".")) {
				log.info(">>" + requestPath);

				// 判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环
				if (session == null || session.getAttribute(SessionName.ADMIN_USER_ID) == null) {// 未登录
					//放心的连接
					if (paramList.contains(requestPath)) {
						return super.preHandle(request, response, handler);
					} else {
						// 未登录  
	                    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(basePath);  
	                    builder.append("/manageAdminUser/toLogin\";</script>");  
	                    out.print(builder.toString());  
	                    out.close();  
	                    return false;  
//			    response.sendRedirect(basePath + "/manageAdminUser/toLogin");// 登陆页面
					}
				} else {// 已登录
					request.setAttribute("requestPath", requestPath);
					return super.preHandle(request, response, handler);
				}
			} else {
				return super.preHandle(request, response, handler);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		return false;
	}

	//设置放行的URL
	public void setParamList(List<String> paramList) {
		this.paramList = paramList;
	}

}


步骤二:在spring-servlet.xml中配置拦截器

<!-- 拦截器 -->
    <mvc:interceptors>  
        <bean class="com.base.interceptor.SystemInterceptor">
        	<!-- 配置不拦截的URL  -->
			<property name="paramList">
				<list>
					<value>/manageAdminUser/toLogin</value>
					<value>/manageAdminUser/login</value>
					<value>/manageAdminUser/pcrimg</value>
					<value>/api/client/login</value>
					<value>/api/client/loginDirect</value>
					<value>/api/client/loginDemo</value>
					<value>/api/client/loginDemoAjax</value>
					<value>/api/client/uploadDoc</value>
					<value>/api/client/mvdoc</value>
					<value>/api/client/docs</value>
				</list>
			</property>
        </bean>  
    </mvc:interceptors>


步骤三:在web.xml文件中配置SpringMVC的核心控制器

<span style="white-space:pre">	</span><servlet>
		<servlet-name>spring3</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/spring3-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>spring3</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>



猜你喜欢

转载自blog.csdn.net/a1106900429/article/details/48630605