Struts2防止用户未登录操作

在做登录案例的时候,我们会考虑到这个问题,在用户未登录之前,用户是不能访问相关信息界面的,那就需要加上权限的控制,告诉用户必须处于登录状态,才可以访问。

在ssh框架中,才用struts2的拦截器进行权限的控制

那么什么是拦截器呢?

拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。
在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

struts2中的拦截器是利用AOP的思想,不知道什么是AOP的,可以查看之间的博客。

那么知道了什么是拦截器之后,我们怎么做权限控制呢?

首先,我们通过下面这张图,来理解如何使用拦截器做权限控制

思路:

1.定义一个拦截器类(类里面通过判断是否有用户存在session里面,如果没有就拦截要访问的页面)

2.在struts.xml文件中配置拦截器

3.在要拦截的action中使用拦截器接口

Demo:

拦截器类

LoginInterceptor.java:

package com.baidu.demo;

import org.apache.struts2.ServletActionContext;

import com.baidu.pojo.Login;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

public class LoginInterceptor  extends MethodFilterInterceptor{

	

	private static final long serialVersionUID = -6989408598907040L;

	@Override
	protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
		//判断session中是否保存了后台用户数据
		Login username =(Login) ServletActionContext.getRequest().getSession().getAttribute("login");
		System.out.println(username);
		if(username == null){
			//没有登录就访问了
			ActionSupport action =(ActionSupport) actionInvocation.getAction();
			action.addActionError("您还没有登录,没有权限访问");
			return "loginfail";
		}else{
			//已经登录过了
			return actionInvocation.invoke();
		}	
	
	}

}

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>
	
		
		<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
		<constant name="struts.devMode" value="true"/>
		
		<package name="default" namespace="/" extends="struts-default">
                <!-- 定义拦截器-->
				<interceptors>
						<interceptor name="LoginInterceptor" class="com.baidu.demo.LoginInterceptor"></interceptor>
				</interceptors>
				<global-results>
					<result name="loginfail">/index.jsp</result>
				</global-results>
		
				<action name="user_*" class="userAction" method="{1}">
					<result name="list">/list.jsp</result>
					<result name="update">/update.jsp</result>
					<result name="delete" type="redirect">user_list</result>
					<result name="toadd">/add.jsp</result>
					<result name="add" type="redirect">user_list</result>
					<!-- 引入自定义拦截器及默认的拦截器 -->
					<interceptor-ref name="LoginInterceptor"></interceptor-ref>
					<interceptor-ref name="defaultStack"></interceptor-ref>
				</action>
		
				<!-- class="RegistAction"与applicationContext.xml中的id对应 -->  
		        <action name="regist" class="registAction">  
		            <result>/index.jsp</result>  
		        </action>  
		          
		        <action name="login" class="loginAction" >  
		            <result name="success" type="redirectAction">user_list</result>  
		            <result name="input">/input.jsp</result>  
		        </action>
		
		</package>
	</struts>

以上就是struts2拦截器做权限控制。

猜你喜欢

转载自blog.csdn.net/weixin_42719412/article/details/83411397