Struts2_08_Struts拦截器(模拟登录验证拦截)

这一篇,主要介绍自定义拦截器,

通过自定义的模拟登录验证拦截器来介绍:

只有当用户登录了,才能发送请求。不登录不能请求。

 首先定义一个User实体。属性:userName  password

定义service层的UserService

	public boolean login(User user) {
		if("12".equals(user.getUserName()) && "1234".equals(user.getPassword())){
			return true;
		}else {
			return false;
		}
	}

再定义UserAction:

public class UserAction extends ActionSupport{	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private User user = new User();
	private UserService userService = new UserService();
	private String error;
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public String getError() {
		return error;
	}
	public void setError(String error) {
		this.error = error;
	}
	@Override
	public String execute() throws Exception {
		if(userService.login(user)) {
			ActionContext actionContext = ActionContext.getContext();
			Map<String, Object> session = actionContext.getSession();
			session.put("currentUser", user);
			return SUCCESS;
		}else {
			this.error="用户名或密码错误!";
			return ERROR;
		}
	}
}

验证通过,将正确的用户存在session中。返回success,这里注意获取session的方法

不通过,返回error.

定义拦截器:LoginInterceptor拦截器:

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println("执行Action前");
		Map<String, Object> session = ActionContext.getContext().getSession();
		Object currentUser = session.get("currentUser");
		String result = null;
		if(currentUser!=null) {
			result = invocation.invoke();		
		}else {
			HttpServletRequest request=(HttpServletRequest)invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
			request.setAttribute("error", "请先登录!");
			result="error";
		}
		System.out.println("result:"+result);
		System.out.println("执行Action后");
		return result;
	}

在执行UserAction前,先进行一下判断,看看session中是否currentUser.有说明已经登录了,没有说明未登录。

已经登录了,继续执行invocation.invoke();    

未登录,定义一个error信息,保存到request中,这里注意获取request的方法。

再struts.xml中:

<struts>
	<package name="user" extends="struts-default" >
		<interceptors>
			<interceptor name="loginInterceptor" class="com.java.interceptor.LoginInterceptor"></interceptor>
		</interceptors>
		<action name="user" class="com.java.action.UserAction">
			<result name="success">/success.jsp</result>
			<result name="error">/login.jsp</result>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
		<action name="hello" class="com.java.action.HelloAction">
			<result name="success">/success.jsp</result>
			<result name="error">/error.jsp</result>
			<interceptor-ref name="loginInterceptor"></interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
	</package>
</struts>

当请求不是验证登录时,要拦截。

请求界面:

<form action="user" method="post">
用户名:<input type="text" name="user.userName"/>
密码:<input type="password" name="user.password"/><br/>
<input type="submit" value="登录"/><font color="red">${error }</font>
</form>

现在想,如果很多请求时呢?要每一个请求后面都加两个拦截器吗?

定义一个拦截器栈,并把该栈设为默认的拦截器栈即可。

		<interceptors>
			<interceptor name="loginInterceptor" class="com.java.interceptor.LoginInterceptor"></interceptor>
			<interceptor-stack name="myStack">
				<interceptor-ref name="loginInterceptor"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="myStack"></default-interceptor-ref>

此时两个action:

<action name="user" class="com.java.action.UserAction">
		<result name="success">/success.jsp</result>
		<result name="error">/login.jsp</result>
		<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
<action name="hello" class="com.java.action.HelloAction">
		<result name="success">/success.jsp</result>
		<result name="error">/error.jsp</result>
</action>

因为登录不需要拦截,所以要写拦截器栈。表示不用默认的拦截器栈

测试:

请求login.jsp时:

当输入密码错误时:

当未登录,请求hello时:

登录成功时:

在请求hello:

 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、资源1项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值