用户身份拦截器JAVA,Struts2自定义拦截器实现权限控制实例(非常详细)

网上购物对于人们并不陌生,当人们浏览购物网站,看中某个商品并选择购买后,如果之前用户没有登录该网站,则页面会跳转到登录页面并提示用户尚未登录;如果用户已登录并单击购买商品时,则会跳转到支付(或结算)页面中进行后续操作。

在上述需求中,对未登录用户的权限控制就可以通过拦截器实现。下面编写案例模拟购物网站流程,要求使用 Struts2 的拦截器实现对用户的权限控制。

1. 创建项目

在 MyEclipse 中创建一个 Web 项目 struts2Demo03,将 Struts2 框架所需的 JAR 包添加到项目 WEB-INF 目录下的 lib 文件夹中,并发布到类路径下。

2. 配置 web.xml 文件

在 web.xml 文件中配置过滤器和首页信息,其配置代码如下所示。

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

main.jsp

3. 创建用户实体类

在 src 目录下创建一个名为 com.mengma.domain 的包,在该包下创建 User 类,如下所示。

package com.mengma.domain;

public class User {

private String username; // 用户名

private String password; // 密码

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

}

在 User 类中,定义了 username 和 password 两个属性,以及其 getter 和 setter 方法。

4. 创建 Action

1)创建登录 Action。在 src 目录下创建包 com.mengma.action,在该包下创建 LoginAction 类,编辑后如下所示。

package com.mengma.action;

import com.mengma.domain.User;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionSupport;

import com.opensymphony.xwork2.ModelDriven;

public class LoginAction extends ActionSupport implements ModelDriven {

private static final long serialVersionUID = -8493698886438630994L;

private User user = new User();

@Override

public User getModel() {

return user;

}

public String execute() throws Exception {

// 获取ActionContext

ActionContext actionContext = ActionContext.getContext();

if ("admin".equals(user.getUsername())

&& "123456".equals(user.getPassword())) {

// 将用户存储在session中

actionContext.getSession().put("user", user);

return SUCCESS;

} else {

actionContext.put("msg", "用户名或密码错误,请重新登录!");

return INPUT;

}

}

}

2)创建商品 Action。在 com.mengma.action 包下创建 BookAction 类,编辑后如下所示。

package com.mengma.action;

import com.opensymphony.xwork2.ActionSupport;

public class BookAction extends ActionSupport {

private static final long serialVersionUID = 5640989517690867879L;

// 购买图书

public String buy() {

return SUCCESS;

}

}

5. 创建拦截器

通过之前对拦截器的学习,可以将自定义拦截器的使用过程分为以下三步。

用户自定义的拦截器类,必须实现 Interceptor 接口或继承 AbstractInterceptor 类。

需要在 Struts.xml 中定义自定义的拦截器。

在 Struts.xml 中的 Action 中使用拦截器。

下面就按照上述步骤创建拦截器。

1)创建拦截器类。在 src 目录下创建一个名称为 com.mengma.interceptor 的包,在该包下创建一个名称为 PrivilegeInterceptor.java 的文件,如下所示。

package com.mengma.interceptor;

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ActionContext;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class PrivilegeInterceptor extends AbstractInterceptor {

private static final long serialVersionUID = 193664972753450682L;

@Override

public String intercept(ActionInvocation invocation) throws Exception {

// 得到 ActionContext

ActionContext actionContext = invocation.getInvocationContext();

// 获取User对象

Object user = actionContext.getSession().get("user");

if (user != null) {

return invocation.invoke(); // 继续向下执行

} else {

actionContext.put("msg", "您还未登录,请先登录!");

return Action.LOGIN; // 如果用户不存在,则返回login值

}

}

}

2)配置 struts.xml 文件。在 src 目录下创建 struts.xml 文件,此文件用于声明自定义拦截器、拦截器栈以及对 book 操作的 Action,其代码如下所示。

/p>

"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"

"http://struts.apache.org/dtds/struts-2.3.dtd">

class="com.mengma.interceptor.PrivilegeInterceptor" />

/main.jsp

/login.jsp

method="{1}">

/success.jsp

/login.jsp

在 struts.xml 中,首先声明了一个名称为 privilege 的拦截器,并将该拦截器放入自定义的拦截器栈 myStack 中;然后配置了用户登录的 action 信息;最后定义了关于对页面 book 操作的 action 信息,并在该 action 中引用自定义的拦截器栈 myStack。

6. 创建显示页面

在 WebContent 目录下创建三个视图页面,分别为主页 main.jsp、登录页面 login.jsp 和操作成功页面 success.jsp。其中主页 main.jsp 的代码如下所示。

pageEncoding="utf-8"%>

主页
《SSH框架整合实战教程》购买

登录页面 login.jsp 的代码如下所示。

pageEncoding="utf-8"%>

登录

input[type=text],input[type=password]{width:150px}

用戶名:${requestScope.msg }
密    码:

操作成功页面 success.jsp 的代码如下所示。

pageEncoding="utf-8"%>

成功页面

尊敬的会员${user.username },您已成功购买商品,祝您购物愉快!

7. 运行项目并查看结果

启动 struts2Demo03 项目,在浏览器的地址栏中输入地址 http://localhost:8080/struts2Demo03/main.jsp 访问其主页,浏览器的显示结果如图 1 所示。

7adb93ded19a3d549deaa8605eb6313f.png

图 1  主页

当单击购买链接后,页面将跳转到登录页面中,并提示用户登录,如图 2 所示。

3927a81f9b23eee4b504ea038b1fe2b0.png

图 2  登录页面

如果输入错误的用户名和密码,将提示用户名或密码错误信息,如图 3 所示。

e84b8edccfa49f1de2135ccaa81fb701.png

图 3  登录页面

当输入正确的用户名和密码并登录成功后,会再次跳转到主页,此时如果单击购买链接,将提示用户已经成功购买商品,如图 4 所示。

2280c76d38230f140ac1e28e7f3bcef7.png

图 4  成功页面

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页