用Filter防止用户访问一些未被授权的资源,比如一个用户未登录就不允许访问网站的某些页面,并将页面重定向到需要用户登录的页面,下面是一个相关的例子:
package com.drp.util.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class AuthFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {//1,doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
HttpServletRequest request = (HttpServletRequest)servletRequest;//;//如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest
HttpServletResponse response = (HttpServletResponse)servletResponse。
String currentURL = request.getRequestURI();//取得根目录所对应的绝对路径:
String targetURL = currentURL.substring(currentURL.indexOf("/", 1), currentURL.length()); //截取到当前文件名用于比较
HttpSession session = request.getSession(false);
if (!"/login.jsp".equals(targetURL)) {//判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环
if (session == null || session.getAttribute("user") == null) {//*用户登录以后需手动添加session
System.out.println("request.getContextPath()=" + request.getContextPath());
response.sendRedirect(request.getContextPath() + "/login.jsp");//如果session为空表示用户没有登录就重定向到login.jsp页面
return;
}
}
//加入filter链继续向下执行
filterChain.doFilter(request, response);//.调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
然后在配置文件web.xml里添加: (请注意,过滤是在serlvet规范2.3版中初次引入的。因此,web.xml文件必须使用DTD的2.3以上版本。)
<filter>
<filter-name>AuthFilter</filter-name>
<filter-class>com.drp.util.filter.AuthFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthFilter</filter-name>
<url-pattern>*.jsp</url-pattern>//表示对所有jsp文件有效
</filter-mapping>
这样用户没有登录的情况下就会转到登录页面。
分享到:
相关推荐
【标题】"合肥工业大学控制工程初试.rar"所包含的资料是针对合肥工业大学2019年控制工程专业硕士研究生入学考试的复习材料。这个压缩包可能是由一位曾经的考生或者教师整理的,包含了该专业初试阶段所需的重要知识点...
控制科学与工程是一门涉及自动化、检测技术、系统工程、模式识别与智能...以上是对部分重点院校控制科学考研初试和复试科目的详细介绍,考生在备考时应详细了解目标院校的具体要求,并结合自身优势选择合适的复习路径。
在准备过程中,考生应全面复习控制理论的基础知识,包括经典控制理论、现代控制理论、信号处理、电子技术、微机原理等,并关注学校对专业技能和科研能力的要求。同时,了解并提升外语水平,因为许多学校会在复试中...
1. **控制系统的基本概念**:理解控制系统的组成,包括被控对象、控制器、传感器和执行器等组成部分,以及它们之间的关系。 2. **传递函数**:传递函数是描述系统动态特性的重要工具,通过输入信号和输出信号之间的...
针对控制理论与控制工程这一学科(0811 控制科学与工程)下属的二级学科,如控制理论与控制工程、检测技术与自动化装置、系统工程、模式识别与智能系统、导航、制导与控制等专业的初试和复试的专业课设置。...
3. **系统性能指标与校正方法**:为了满足实际应用的需求,往往需要对控制器进行适当的调整。这部分内容会涉及时间域性能指标(如超调量、调整时间等)以及各种常见的校正策略(如PID控制器设计、相位超前/滞后补偿...
它通常包含了教师对课程内容的理解和对学生能力的期望。通过研究这些试卷,考生可以了解常见的考试题型,如选择题、填空题、简答题和编程题等,从而有针对性地进行复习。同时,可以分析试题的难度分布,以便合理分配...
### 贵州大学837自动控制原理2020年考研专业课初试大纲解析 #### 一、考试目的及基本要求 本大纲针对的是贵州大学硕士研究生招生考试中的科目代码及名称为837的《自动控制原理》。该考试旨在评估考生对于自动控制...
期末考试试卷则提供了实际应用和解题技巧的训练,可以检验你对知识的掌握程度,通过模拟考试来提升应试能力。 复习电力电子和电力系统分析时,应注重理论与实践相结合,不仅要理解基本概念,还要通过做题和实验来...
控制工程专业强调对系统动态特性的理解和分析,考生需要掌握状态空间法、控制系统设计、系统稳定性分析等内容。在复习时,不仅要扎实基础理论,还要注重解题技巧和速度的提升,同时关注历年真题,模拟试题的练习。 ...
在具体院校中,例如北京工业大学的初试会考自动控制原理,复试可能涉及电子技术和计算机原理;北京航空航天大学的双控专业可能会选择控制理论综合或控制工程综合,而模式识别与智能系统专业则可能考控制工程综合或...
控制科学考研学校初试复试科目介绍.pdf控制科学考研学校初试复试科目介绍.pdf
1. 考研初试和备考信息:了解安徽理工大学836自动控制理论的考试科目、考试大纲、参考书目以及适用的院系专业等信息。 2. 考研真题的重要性:历年考研真题反映了考试的题型、难度和考查重点,是考生复习的重要依据...
东北大学2009年初试的试题覆盖了该领域的核心概念,包括负反馈控制、系统结构图简化、传递函数、二阶系统性能指标、根轨迹分析、伯德图绘制、系统稳定性和非线性系统分析等知识点。 一、负反馈控制系统方框图的绘制...
这是重庆大学初试真题答案(2017年之前的,都是照片格式)和复试资料(这部分资料对复试还是有很大参考价值),祝你们成功!
C++是一种广泛应用的面向对象编程语言,以其高效、灵活性和强大的功能著称,尤其适合开发这种涉及到数据管理和流程控制的应用。 【系统功能】 1. **考生信息管理**:系统能够录入、查询、修改和删除考生的基本信息...
西安工业大学研究生初试810自动控制原理13-15年真题
### 贵州大学837自动控制理论2020年考研专业课初试大纲解析 #### 一、考试目的及基本要求 本大纲旨在评估考生对于自动控制理论基础知识的掌握程度及其应用能力。考试重点在于考查考生是否能够理解和运用自动控制的...