- 浏览: 7423 次
最新评论
struts都是通过action来请求页面的,所以可以通过全局的拦截器来拦截用户的非法登陆,如果用户知道jsp页面的地址,这种情况基本不会出现,那就需要用过滤器对页面进行过滤拦截了.
这里用拦截器进行拦截.
firtpart.xml:(设定默认的拦截器,每个Action都会默认调用)
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE struts PUBLIC
3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
4 "http://struts.apache.org/dtds/struts-2.3.dtd">
5
6 <struts>
7 <package name="test" extends="struts-default" namespace="/test">
8
9 <interceptors>
10 <interceptor name="loginJudge"
11 class="com.sunflower.interceptor.UsrLoginInterceptor">
12 </interceptor>
13
14 <!-- 自定义拦截器栈 -->
15 <interceptor-stack name="myDefaultStack">
16 <interceptor-ref name="loginJudge"></interceptor-ref>
17 <interceptor-ref name="defaultStack"></interceptor-ref>
18 </interceptor-stack>
19 </interceptors>
20
21 <!-- 将自定义拦截器栈设置默认的拦截器 -->
22 <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
23
24 <global-results>
25 <result name="login" type="redirect">/login.jsp</result>
26 </global-results>
27
28 <action name="logintest" class="com.sunflower.action.LoginAction">
29 <result name="success" type="redirectAction">
30 <param name="actionName">sayhello</param>
31 <param name="namespace">/test</param>
32 <param name="username">${username}</param>
33 </result>
34 </action>
35
36 <action name="sayhello" class="com.sunflower.action.SayHelloAction">
37 <result name="success">/welcome.jsp</result>
38 <result name="login">/login.jsp</result>
39 </action>
40 </package>
41 </struts>
sturts.xml:(引用firtpart.xml)
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE struts PUBLIC
3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
4 "http://struts.apache.org/dtds/struts-2.3.dtd">
5
6
7 <struts>
8 <include file="firtpart.xml"></include>
9 </struts>
UsrLoginInterceptor.java:(拦截器,对所有Action拦截,除了登陆Action)
1 package com.sunflower.interceptor;
2
3 import java.util.Map;
4
5 import com.opensymphony.xwork2.Action;
6 import com.opensymphony.xwork2.ActionInvocation;
7 import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
8 import com.sunflower.action.LoginAction;
9
10 /**
11 * 用户拦截器,每个页面都会用到
12 *
13 * @author hanyuan
14 * @time 2012-6-6 下午12:38:05
15 */
16 public class UsrLoginInterceptor extends AbstractInterceptor {
17
18 /**
19 * 判断用户是否已经登录,如果没有登录,则为非法请求,进行拦截
20 */
21 public String intercept(ActionInvocation arg0) throws Exception {
22 // 判断是否请求为登录界面(login),如果是则不拦截
23 if (LoginAction.class == arg0.getAction().getClass())
24 return arg0.invoke();
25
26
27 // 如果是请求其他页面,进行拦截
28 Map map = arg0.getInvocationContext().getSession();
29 if (null == map.get("username"))
30 return Action.LOGIN;
31
32 return arg0.invoke();
33 }
34
35 }
LoginAction.java:(进行登陆校验)
1 package com.sunflower.action;
2
3 import java.util.Map;
4
5 import com.opensymphony.xwork2.ActionContext;
6 import com.opensymphony.xwork2.ActionSupport;
7 import com.sunflower.util.UserExist;
8
9 public class LoginAction extends ActionSupport {
10 private String username;
11 private String password;
12
13 public String getUsername() {
14 return username;
15 }
16
17 public void setUsername(String username) {
18 this.username = username;
19 }
20
21 public String getPassword() {
22 return password;
23 }
24
25 public void setPassword(String password) {
26 this.password = password;
27 }
28
29 public String execute() throws Exception {
30 // 设置session
31 Map map = ActionContext.getContext().getSession();
32 // 如果用户存在
33 if (UserExist.isExist(username, password)) {
34 if (null == map.get("username"))
35 map.put("username", username);
36 return SUCCESS;
37 }
38
39 return LOGIN;
40 }
41 }
SayHelloAction.java:(转向欢迎界面的action)
1 package com.sunflower.action;
2
3 import com.opensymphony.xwork2.ActionSupport;
4
5 public class SayHelloAction extends ActionSupport {
6 String username;
7
8 public String getUsername() {
9 return username;
10 }
11
12 public void setUsername(String username) {
13 this.username = username;
14 }
15
16 public String execute() throws Exception {
17 return SUCCESS;
18 }
19 }
UserExist.java:(模拟用户校验的类)
1 package com.sunflower.util;
2
3 public class UserExist {
4 //判断用户是否存在
5 public static boolean isExist(String username, String password)
6 {
7 String name = username.trim();
8 String word = password.trim();
9
10 if(name.equals("yuan") && word.equals("123"))
11 return true;
12 return false;
13 }
14 }
login.jsp:
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%@ taglib prefix="s" uri="/struts-tags"%>
3 <%
4 String path = request.getContextPath();
5 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
6 %>
7
8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
9 <html>
10 <head>
11 <base href="<%=basePath%>">
12
13 <title>登录界面</title>
14 <meta http-equiv="pragma" content="no-cache">
15 <meta http-equiv="cache-control" content="no-cache">
16 <meta http-equiv="expires" content="0">
17 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
18 <meta http-equiv="description" content="This is my page">
19 <!--
20 <link rel="stylesheet" type="text/css" href="styles.css">
21 -->
22 </head>
23
24 <body>
25 <center>
26 <font color="bule" size="20">用户登录</font>
27 <br>
28 <s:form action="test/logintest">
29 <s:textfield name="username" label="用户名:" size="20"></s:textfield>
30 <s:textfield name="password" label="密码:" size="20"></s:textfield>
31 <s:submit value="提交"></s:submit>
32 </s:form>
33
34 </center>
35 </body>
36 </html>
welcome.jsp:
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <%@ taglib prefix="s" uri="/struts-tags"%>
4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
5 <html>
6 <head>
7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
8 <title>登陆成功</title>
9 </head>
10 <body>
11 <center>
12 <s:property value="username"/>,恭喜你登录成功!
13 </center>
14 </body>
15 </html>
发表评论
-
struts2之单个文件上传
2012-09-14 23:11 623通过2种方式模拟单个文件上传,效果如下所示 开发步 ... -
struts2配置文件
2012-09-11 14:27 646struts.xml文件结构 struts.xml文件是整个 ... -
MINA传输文件
2012-09-04 21:46 1027mina传输对象已经不是什么难事,一般啃半天代码就能搞定,但是 ... -
ORACLE 存储过程
2012-09-04 21:35 481简要记录存储过程语法与Java程序的调用方式 一 存储 ... -
java nio入门基础
2012-08-31 09:37 11. 基本 概念 IO 是 ... -
MINA入门例子
2012-08-30 16:11 991貌似java的IO、NIO的入门 ...
相关推荐
1. **配置全局拦截器**:除了为每个Action单独配置拦截器,还可以配置全局拦截器,这将在所有Action上生效。在`struts.xml`中: ```xml <package name="default" extends="struts-default"> ......
7. **异常处理**:学习如何在Struts2中处理异常,如使用全局异常拦截器。 8. **国际化和本地化**:如果案例涉及,了解如何在Struts2中实现多语言支持。 通过深入学习和实践这个案例,你可以更全面地理解和掌握...
拦截器适用于Action级别的控制,而Filter则可以全局拦截所有请求,两者相辅相成,确保只有已登录用户才能访问受保护的资源。 在提供的`Stuts2_My_Interceptor`压缩包文件中,可能包含了实现上述功能的相关代码和...
Struts2的拦截器机制使得添加全局或特定操作的逻辑变得简单,同时提供了一套强大的结果类型和国际化支持。 2. Hibernate持久化框架:Hibernate是Java领域中的一款ORM(对象关系映射)框架,用于简化数据库操作。它...
本资源“struts2_登录”可能是关于如何实现Struts2框架下的用户登录功能的一个练习项目。 在Struts2中,登录功能通常涉及到以下几个关键知识点: 1. **Action类**:Struts2的核心组件之一,它是业务逻辑的载体。你...
`Struts2_API.chm`文件是一个帮助文档,通常以CHM(Compiled HTML Help)格式存在,这是一种由微软开发的、用于存储HTML文档的压缩格式,便于离线阅读。CHM文件包含索引、搜索功能,使得用户可以快速找到所需的信息...
拦截器是Struts2框架的核心特性之一,它们扮演着处理请求、增强功能和实现业务逻辑的角色。在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的...
在Struts2中,拦截器是实现业务逻辑和表示层解耦的重要工具,它们允许开发者在请求到达Action之前或之后执行特定的操作。在这个实例中,我们将探讨如何创建一个自定义拦截器来处理未登录用户的非法请求。 首先,...
在`struts.xml`中配置拦截器的方式有多种,包括指定特定Action的拦截器、全局拦截器等。以下是一个具体的例子: ```xml <package name="struts-shop" extends="struts-default"> ...
6. **配置文件**:Struts2的配置文件如`struts.xml`或`struts-default.xml`定义了应用的全局行为,包括动作映射、拦截器栈等。开发者可以根据需求自定义配置,以实现特定的应用逻辑。 7. **安全相关**:Struts2的...
### Struts2拦截器实现用户登录权限的验证 在Web应用开发中,用户登录权限验证是确保系统安全的重要环节之一。Struts2框架提供了一种灵活的方式来实现这一功能:通过自定义拦截器来控制用户的访问权限。下面我们将...
在本项目中,过滤器可能与拦截器协同工作,同样负责验证用户登录状态。通常,过滤器通过实现`javax.servlet.Filter`接口并重写`doFilter()`方法来实现。过滤器可以全局应用,对所有请求或特定URL模式生效。 **非法...
Struts2的核心是拦截器(Interceptor),它不仅可以用来处理用户请求,还可以进行各种预处理工作,如验证用户输入、转换数据类型等。 #### 二、拦截器基础 拦截器在Struts2中扮演着非常重要的角色,它们可以拦截...
在struts.xml配置文件中,可以使用`<interceptors>`标签定义全局拦截器,也可以在具体的Action配置中使用`<interceptor-ref>`引用拦截器。例如: ```xml <!-- ... --> ``` **使用场景** 1. **...
Struts2_API文档是开发者在使用Struts2框架时的重要参考资料,包含了框架中所有类、接口、方法及其实现的详细描述,为编程提供了详细的指导。 在Struts2_API文档中,我们可以找到以下关键知识点: 1. **Action接口...
全局拦截器通常用于处理跨Action的需求,比如用户登录验证、性能监控等。创建全局自定义拦截器需要以下步骤: 1. **编写拦截器类**:继承自`org.struts2.interceptor.Interceptor`接口或实现`...
Struts2_API是开发者在使用Struts2框架时的重要参考资料,它详细地列出了框架提供的所有类、接口和方法,帮助开发者理解并有效地利用Struts2的功能。 1. **Action接口与ActionSupport类**: - `Action`接口是...
然后,可以在action配置中使用该拦截器,也可以在全局拦截器栈中定义: ```xml <!-- 针对特定Action配置 --> <result>success.jsp <!-- 全局拦截器配置 --> ...
Struts2是一个基于MVC...总的来说,`struts2_core.jar`是Struts2框架的核心,包含了实现MVC模式的关键组件,以及拦截器、结果类型等关键机制。开发者需要理解并熟练掌握这些概念,才能有效地利用Struts2进行Web开发。
总的来说,通过 Struts2 的拦截器机制,我们可以实现高效且可复用的登录验证功能,有效地控制用户访问权限,提高系统的安全性。同时,通过合理的配置和页面设计,可以确保用户体验的流畅性。这种基于拦截器的登录...