学习struts2框架,自定义一个拦截器,来实现一个简单的权限问题。

学习struts2框架,自定义一个拦截器,来实现一个简单的权限问题。

对于一个系统的删除按钮,只有登录的人才可以进行删除,就会跳转到一个成功页面。

那么登录的人,在session中就有用户信息,如果session中存在的用户不为null,就表示有人登录;

如果没有人登录的话,进行删除功能,就会返回登录页面,同时提示“用户未登录,请先登录”

 

 

展示一波效果

1.先看看我们删除按钮的页面

2.现在我们没有登录,看看点这个链接有什么效果:

3.然后登录一波:

4.成功登录后:

5.到这里,session中就有了bigface用户。这个时候载次点击“删除功能”的链接。

 

 

下边是代码部分:

1.先是几个前端页面:

1).删除链接的一个页面  del.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	欢迎来到删除功能的页面
	</tr>
	<!-- 这里写一个链接跳转到一个action中 -->
	<a href="/SSHProject/delAction" >删除功能</a>
</body>
</html>

2).登录页面login2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>${msg }</br>
	<form action="loginAction" ,method="post">

这个是登录网页</br><!-- 添加一个换行符 -->

		用户名:<input type="text" name="username" /><br>
		 密码:<input type="password" name="password" /><br>
		<input type="submit" value="登录"/>
</form>
</body>
</html>

3).成功删除页面  success3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
这里是成功删除后的网页:</br><!-- 添加了一个换行符 -->
<!-- 下边使用el来获取数据 -->
用户名:  ${username} 进行了删除操作

</body>
</html>

2.java代码部分;

1):拦截器部分:

package cqupt.ssh.interceptor;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class PrivilegeInterceptor extends AbstractInterceptor{

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub
		ActionContext context=invocation.getInvocationContext();
		Object username = context.getSession().get("username");
//		如果session中有用户,就放行
		if(username!=null){
			return invocation.invoke();
		}else{
			context.put("msg", "您还没有登录,请先登录!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
			return "login2";
		}
		
	}

}

这个拦截器后期需要写到struts.xml中,同时用于控制DelAction这个动作。

2)DelAction.java这个action在配置中会配入上边写的拦截器,就是只有用户登录过后(session中用户不为null)。才可以进行删除操作。

package cqupt.ssh.action;

public class DelAction {
	public String del() {
		System.out.println("这里进行了删除工作了");
		return "success3";

	}
}

3)下边是登录功能的action

package cqupt.ssh.action;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;

public class LoginAction {
	/*
	 * 写一个登录功能, 目的就是将前端传来的用户名放入到session中, 
	 * 后边如果使用删除功能的时候, 就是要查询这个session中是否有这个用户名
	 */
	// 来一个属性驱动装前端传来的数据
	private String username;

	public void setUsername(String username) {
		this.username = username;
	}

	public String login() {
		if (username.equals("bigface")) {
			ActionContext context = ActionContext.getContext();
			Map<String, Object> session = context.getSession();
			// 这里是将用户名存入了session
			session.put("username", username);
			return "del";
		}else{
			//如果用户名错误,就返回登录页面
			return "login2";
		}
	}
}

3.开始配置文件:

1)首先是web.xml中要配置struts2的核心过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	<display-name>SSHProject</display-name>


	<!-- struts2的核心过滤器 -->
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
</web-app>

2).配置我们的struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

	<package name="cqupt" namespace="/" extends="struts-default">
		<!-- 声明拦截器 -->
		<interceptors>
			<interceptor name="privilege"
				class="cqupt.ssh.interceptor.PrivilegeInterceptor" />
			<interceptor-stack name="myStack">
				<interceptor-ref name="defaultStack" />
				<interceptor-ref name="privilege" />
			</interceptor-stack>
		</interceptors>
		<!-- 下边开始写action ,第一个action是登录使用的 -->
		<action name="loginAction_*" class="cqupt.ssh.action.LoginAction"
			method="login">
			<result name="login2">/login2.jsp</result>
			<result name="del">/del.jsp</result>
		</action>
		<!-- 下边的action是del方法使用的 ,下边的action name也可以写成name="delAction_*然后重前端传入方法来 -->
		<action name="delAction_*" class="cqupt.ssh.action.DelAction"
			method="del">
			<result name="success3">/success3.jsp</result>
			<result name="login2">/login2.jsp</result>
			<!-- 在这个action中,使用自定义的拦截器 -->
			<interceptor-ref name="myStack" />
		</action>
		
	</package>
</struts>

 

 

 

运行并测试:

访问方式1:先访问还没有登录的一个删除页面,直接删除一波看看。(这个方式完整过程参考最开始的展示部分)

输入网页:http://localhost:8080/SSHProject/del.jsp

点击删除链接后:

访问方式2:

也可以先访问我们的登录页面:http://localhost:8080/SSHProject/login2.jsp

下边我们来登录,这里我设置的正确用户名是bigface,如果输入错误:

点击登录过后:

然后再正确登录:

点击登录后就进入了操作页面,这里写了一个删除功能的操作:

点击删除功能:

猜你喜欢

转载自blog.csdn.net/Handsome2013/article/details/86476143