重定向请求
下面我们来构造一个AuthenticationFilter过滤器,它的功能是截获对Controller Servlet的请求,然后验证用户的身份。按照前面介绍的步骤用向导创建过滤器时,向导提供了定义初始化参数、过滤器的URL和Servlet映射等参数。如果不设置这类参数,缺省情况下向导用过滤器本身的名称创建一个URL映射,我们将在下面用编辑web.xml文件的方式定义映射,因此现在先认可缺省值。注意,如果你想在链中使用一个以上的过滤器,那就必须手工编辑web.xml。
在向导中点击“完成”按钮后,WSAD立即构造出过滤器的骨架代码。对于本例来说,接下来我们唯一的任务就是将代码插入doFilter()方法,如Listing 1所示。
// Listing 1: AuthenticationFilter.java
public void doFilter(
ServletRequest req,
ServletResponse resp,
FilterChain chain)
throws ServletException, IOException {
String nextPage;
RequestDispatcher rd = null;
//检查用户名称和密码
if (req.getParameter("userid") != null) {
if (!((req.getParameter("password").equals("password"))
&& (req.getParameter("userid").equals("user")))) {
ArrayList actionreport = newArrayList();
actionreport.add("登录失败。。。");
(((HttpServletRequest) req).getSession()).setAttribute(
"actionreport", actionreport);
nextPage = "failure.jsp";
System.out.println("获得了来自过滤器的应答。");
// 将请求直接传递给下一个页面(而不是Controller Servlet)
rd = req.getRequestDispatcher(nextPage);
rd.forward(req, resp);
} else {
req.setAttribute("login", "loginsuccess");
// 将请求传递给Controller Servlet
chain.doFilter(req, resp);
System.out.println("获得了来自过滤器的应答。");
}
} else {
rd = req.getRequestDispatcher("Welcome.jsp");
rd.forward(req, resp);
}
}
从上面的代码可以看出,在过滤器中验证用户身份的方式仍和平常的一样。在此过程中,为了获得session对象,我们把ServletRequest定型(cast)成了HttpServletRequest。如果用户未能通过身份验证,我们不再把请求传递给Controller Servlet,而是通过RequestDispatcher把请求传递给报告页面(failure.jsp)。
如果用户通过了身份验证,则我们调用chain.doFilter(),允许应答进入Controller——这是因为调用chain.doFilter()时,链里面已经没有其他过滤器,所以控制将以POST方式转入作为Controller的Servlet,实际上,chain.doFilter()将调用Controller.doPost()方法。
发送请求给Controller之前,我们可以根据用户获得的身份证书来设置请求的属性,这些信息将帮助Controller及其辅助类处理请求。作为一个例子,我们设置了请求的login属性,然后在Controller中检查该属性,Controller把应答返回给success.jsp(如Listing 2所示)。
// Listing 2: controller.java
protected final void doPost(
HttpServletRequest request,
HttpServletResponse response) {
// begining codes
//--用户已通过身份验证
if (((String) request.getAttribute("login")).equals
("login success")) {
ArrayList actionreport = new ArrayList();
actionreport.add("Correct Password");
session.setAttribute("actionreport", actionreport);
nextPage = "success.jsp";
}
if (dispatch) {
RequestDispatcher rd =
getServletContext().getRequestDispatcher(nextPage);
rd.forward(request, response);
} else {
session.invalidate();
}
// ending codes
}
转自:http://www.blogjava.net/lmsun/archive/2005/09/12/12764.html?opt=admin
分享到:
相关推荐
首先,我们需要理解"无过滤器"的概念。在标准的CAS客户端集成中,通常会使用CAS Filter来拦截所有请求,检查是否需要进行CAS验证。但是,有些特殊情况下,可能由于各种原因(如框架限制或特定需求)无法使用Filter。...
1. **认证过滤器 `AuthenticationFilter`** ```java public class AuthenticationFilter implements Filter { public void execute(String request) { System.out.println("Authenticating request: " + ...
在Java Web开发中,过滤器(Filter)是一个非常重要的组件,它主要用于在请求被实际处理之前或之后执行一些预处理或后处理任务。过滤器在Servlet规范中定义,是实现Servlet API的一部分,允许开发者对HTTP请求和响应...
CAS客户端自定义核心过滤器,继承CAS的AbstractCasFilter自定义AuthenticationFilter
Java 过滤器模式详解 Java 过滤器模式(Filter Pattern)是一种常用的设计模式,用于在请求到达目标对象之前或之后,对请求进行处理或过滤。该模式可以用于实现不同的功能,如验证、授权、日志记录、压缩等,将不同...
在IT行业中,尤其是在Web开发领域,过滤器(Filter)是一种非常重要的工具,它允许开发者在请求到达目标资源之前或之后对请求和响应进行处理。在这个主题中,我们将深入探讨如何利用过滤器进行用户验证,特别是在JSP...
在实际开发中,为了保护应用的安全,我们会使用过滤器(Filter)来实现如CSRF防护、登录状态检查等功能。例如,一个`AuthenticationFilter`可以在每个请求之前检查用户是否已登录,如果未登录,则重定向到登录页面。...
在Java Web开发中,Servlet、监听器(Listeners)和过滤器(Filters)是构建Web应用程序不可或缺的组件。这里我们主要探讨如何使用它们来实现文件上传的功能。 Servlet是Java提供的一种用于处理HTTP请求的服务端...
在Java Web开发中,用户登录是常见的功能,而Filter(过滤器)是Servlet技术中一个强大的工具,用于处理HTTP请求和响应。在这个场景下,我们将探讨如何使用Servlet和Filter实现用户登录的功能,以及这两个概念在实际...
Servlet过滤器是Java Web开发中的一个重要概念,它允许开发者在请求到达Servlet之前或者响应离开Servlet之后进行拦截处理。"servlet filter大全"这个主题涵盖了多种常见的过滤器设置,旨在提高应用的功能性和安全性...
责任链模式是一种设计模式,它允许我们通过定义一系列处理对象(过滤器)形成一个链,这些对象依次处理请求,而发送者无需知道哪个对象具体处理请求。这种模式将请求的发送者与接收者解耦,增加了系统的灵活性和可...
过滤器可以实现全局的功能,如登录检查。例如,我们创建一个`AuthenticationFilter`,拦截所有请求,检查session中是否存在用户信息,如果没有,就重定向到登录页面。 10. **监听器(Listener)** 监听器是...
* 认证过滤器:org.jasig.cas.client.authentication.AuthenticationFilter * Ticket校验过滤器:org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter * HttpServletRequest包裹过滤器:org...
3. `AssertionThreadLocalFilter`:此过滤器将用户的认证信息保存在线程本地变量中,使得其他组件能够访问这些信息。 在 CAS 客户端与业务系统集成时,正确配置这些过滤器是确保 SSO 功能正常工作的重要环节。每个...
Spring Security通过过滤器链来实现这些功能,其中最核心的过滤器是`DelegatingAuthenticationEntryPoint`、`AuthenticationFilter`、`AccessDecisionManager`和`AuthenticationManager`。 1. **身份验证...
@WebFilter(filterName = "AuthenticationFilter", urlPatterns = "/*") public class AuthenticationFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse ...
Spring Security 是一个强大的且...- **过滤器链**:Spring Security的核心在于一系列的过滤器,如`DelegatingFilterProxy`(代理到Spring Security的过滤器),`ChannelProcessingFilter`(处理HTTP和HTTPS切换),`...
-- 该过滤器负责实现 HttpServletRequest 请求的包裹, 比如允许开发者通过 HttpServletRequest 的 getRemoteUser()方法获得 SSO 登录用户的登录名,可选配置。 --> <filter-name>CAS HttpServletRequest ...
- **配置 CAS 身份验证过滤器**:`<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>` 检查用户是否已经通过 CAS 认证。 - **配置 CAS 验证过滤器**:`<filter-class>org...
Spring Security通过一系列过滤器实现其功能,如 `FilterSecurityInterceptor` 进行访问决策,`AuthenticationFilter` 处理认证请求,`LogoutFilter` 实现注销操作等。这些过滤器按照特定顺序组成过滤器链,对每个...