在struts2中自定义filter 防止用户通过手动输入网址进行相应操作
SessionFilter.java
public class SessionFilter implements Filter {
public FilterConfig config;
public void destroy() {
// TODO Auto-generated method stub
this.config=null;
}
public static boolean isContains(String container, String[] regx) {
boolean result = false;
for (int i = 0; i < regx.length; i++) {
if (container.indexOf(regx[i]) != -1) {
return true;
}
}
return result;
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest hrequest = (HttpServletRequest)request;
HttpServletResponseWrapper wrapper = new HttpServletResponseWrapper((HttpServletResponse) response);
String logonStrings = config.getInitParameter("logonStrings");
String includeStrings = config.getInitParameter("includeStrings");
String redirectPath = hrequest.getContextPath() + config.getInitParameter("redirectPath");
String disabletestfilter = config.getInitParameter("disabletestfilter");
if (disabletestfilter.toUpperCase().equals("Y")) {
chain.doFilter(request, response);
return;
}
String[] logonList = logonStrings.split(";");
String[] includeList = includeStrings.split(";");
if (!this.isContains(hrequest.getRequestURI(), includeList)) {
chain.doFilter(request, response);
return;
}
if (this.isContains(hrequest.getRequestURI(), logonList)) {
chain.doFilter(request, response);
return;
}
String user = ( String ) hrequest.getSession().getAttribute("name");
if (user == null) {
wrapper.sendRedirect(redirectPath);
return;
}else {
chain.doFilter(request, response);
return;
}
}
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
config = filterConfig;
}
}
在web.xml中的配置
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>filter.SessionFilter</filter-class>
<init-param>
<param-name>logonStrings</param-name><!-- 对登录页面不进行过滤 -->
<param-value>/project/index.jsp;login.action</param-value>
</init-param>
<init-param>
<param-name>includeStrings</param-name><!-- 只对指定过滤参数后缀进行过滤 -->
<param-value>.action;.jsp</param-value>
</init-param>
<init-param>
<param-name>redirectPath</param-name><!-- 未通过跳转到登录界面 -->
<param-value>/</param-value>
</init-param>
<init-param>
<param-name>disabletestfilter</param-name><!-- Y:过滤无效 -->
<param-value>N</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
分享到:
相关推荐
本实例展示了如何在Struts2环境中实现几个关键功能:自定义过滤器、文件上传下载以及用户登录功能。这些功能是任何Web应用程序的基础组成部分,理解和掌握它们对于提升Web开发技能至关重要。 首先,我们来探讨...
在Struts2中,拦截器(Interceptor)扮演着至关重要的角色,它允许开发者在动作执行前后插入自定义逻辑,如日志记录、权限验证等。在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合...
Struts2是一个强大的MVC框架,它在处理用户请求时涉及到数据类型的转换,这在处理复杂的表单数据或者自定义对象时尤其重要。本篇文章将详细介绍如何在Struts2中进行配置与自定义类型转换。 首先,Struts2的配置主要...
记得检查`web.xml`中的`filter`和`filter-mapping`配置,它们是Struts2与请求交互的关键部分。 总之,自定义Struts2拦截器是一项强大的技术,可以增强应用程序的控制和扩展性。通过分析提供的源代码,你可以深入...
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/* </filter-mapping> ``...
本示例中的“通用过滤器filter”是专门为Struts2设计的,用于增强应用的安全性和功能性。 过滤器(Filter)在Java Servlet规范中定义,是基于请求/响应模型工作的。它们通过实现`javax.servlet.Filter`接口,并重写...
Struts2使用过滤器(Filter)作为前端控制器,相比于Struts1使用servlet作为前端控制器更加优雅。 - **适用范围**:Struts2广泛应用于企业级Java Web项目的开发中,特别是那些需要处理大量用户交互和数据展示的应用。 ...
此外,Struts2也支持自定义验证逻辑和全局错误处理。 7. **Struts ValueStack(值栈)** ValueStack是Struts2的核心组件之一,它是一个数据存储结构,用于管理Action上下文中的对象。Action中的属性会被放入...
然后配置web.xml文件,设置Struts2的前端控制器Filter。接着,创建Action类,它是业务逻辑的载体,并通过注解或配置文件进行配置。最后,定义视图层的JSP页面,利用Struts2的标签库来展示结果。 **Struts2配置文件*...
- 在web.xml中配置过滤器(Filter),通常使用`FilterDispatcher`作为入口点,它是Struts2的核心组件之一。 - 这个过滤器会捕获所有进入Web应用的HTTP请求,并将它们传递给Struts2框架处理。 - 配置过程中需要注意...
虽然NetBeans 6中并没有内置对Struts2的支持,但是借助自定义Library和手动配置,完全能够实现Struts2与NetBeans 6的无缝衔接。这一过程不仅增强了你对框架原理的理解,同时也提升了你在复杂环境下解决问题的能力。...
Struts2是一个强大的MVC(Model-View-Controller)框架,...在实际开发中,你可能需要进一步学习Struts2的拦截器、结果类型、OGNL表达式、自定义拦截器、国际化、模型驱动等特性,以更好地利用这个框架提供的强大功能。
在Struts1中,框架通过Servlet启动,而在Struts2中,它通过Filter启动。在`web.xml`配置文件中,需要定义一个名为`struts2`的过滤器,类为`org.apache.struts2.dispatcher.FilterDispatcher`。过滤器的映射应覆盖...
检查web.xml文件中的Struts2 Filter配置,确保`<filter>`和`<filter-mapping>`元素正确无误。过滤器类名应为`org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter`,并确保它被正确映射到`/*`或...
Struts2提供了一系列默认的拦截器,并允许用户自定义拦截器。 **3.3 ActionMapper** `ActionMapper`负责将HTTP请求映射到对应的Action上。大部分情况下,`ActionMapper`并不需要显式配置,它会自动根据请求路径...
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/* </filter-mapping> `...
在Struts2框架中,文件上传是一个常见的功能,它允许用户通过Web应用程序上传文件到服务器。`codeFilter`在此上下文中通常是指一个自定义过滤器,用于在文件上传过程中进行额外的安全检查或处理。这个过滤器可以防止...
`<filter>`标签内指定了过滤器名称和类,`<filter-mapping>`则指定了所有URL(通过`/*`)都将通过Struts2的`StrutsPrepareAndExecuteFilter`过滤器进行处理。避免使用像`/*.do`或`/*.action`这样的特定约定,以保持...
2. **Interceptor**(拦截器):拦截器是Struts2的一大特色,它允许开发者在Action执行前后插入自定义的处理逻辑,如权限验证、日志记录、性能监控等。拦截器的组合使用可以构建出强大的功能模块。 3. **Result**:...
`FilterDispatcher`则是一个Servlet Filter,根据配置文件来决定哪些请求需要经过Struts2处理。如果配置不当,可能会导致问题,如将所有URL模式设为`/*`,确保所有请求都会经过Struts2过滤器。 `ActionProxy`是`...