Struts2实现拦截get请求(只允许post请求),并且实现权限验证(session)详细实例

对于Struts2实现拦截get请求,即只允许post请求的方法很多

最容易想到的想法就是在表单中设置一个隐藏域,该隐藏一次有效,类似于验证码。

这样也是可以实现的,只是有一个问题,该隐藏域任然容易被获取到,并且每次都添加也很麻烦,这里我们就可以使用Struts2的拦截器来实现

Strus2的拦截器继承了AbstractInterceptor类,并且需要重写intercept方法。

这里我们写2个拦截器,以方便大家举一反三的了解和学习

第一个拦截器(InterceptorGet),是拦截请求,只允许post请求


public class InterceptorGet extends AbstractInterceptor{
	private static final long serialVersionUID = 1L;

	@Override
	public String intercept(ActionInvocation arg0) throws Exception {
		String method = ServletActionContext.getRequest().getMethod();
		if(method.equalsIgnoreCase("POST")){
			return arg0.invoke();
		}
		return "login404";
	}

}

return “login404” ; 表示返回login404的全局结果,下面我们列出struts.xml的相关配置

第二个拦截器(interceptorAdmin),是拦截未登录用户访问管理页面,如游客访问管理员页面



public class interceptorAdmin extends AbstractInterceptor{
	private static final long serialVersionUID = 1L;

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		Map<?, ?> session = invocation.getInvocationContext().getSession();
		userinfo uif = (userinfo) session.get("user");
		if(uif == null){
			//返回到登录页面
			return Action.LOGIN;
		}else{
			return invocation.invoke();
		}
	}

}
下面我们开始配置struts.xml


首先在里面定义拦截器,这里的配置因为没有配置拦截器栈,所以没有顺序,配置拦截器栈就有顺序的。(拦截器是按顺序一个一个的执行的哦)


<interceptors>
<!-- 自定义拦截器 -->
<!-- 只允许post请求 -->
<interceptor name="myinterceptorget" class="emb.view.struts.interceptor.InterceptorGet" />
<!-- 管理页面比如有session -->
<interceptor name="myinterceptoradmin" class="emb.view.struts.interceptor.interceptorAdmin" />
</interceptors>
然后配置全局结果,全局结果中的name就是我们上面两个拦截器的返回结果。
<!-- 定义全局结果 -->
		<global-results>
			<result name="login404" type="redirect">login.jsp?error=404</result>
			<result name="login" type="redirect">login.jsp</result>
		</global-results>

最后在我们需要拦截的action里面进行配置即可


<action name="ACupuserhb" class="upuserhb">
			<interceptor-ref name="myinterceptorget" />
			<interceptor-ref name="myinterceptoradmin" />
		    <result type="redirect">admin/index.jsp</result>
		</action>
需要注意的是,根据实际需求,在配置需要拦截的action的时候,这里的拦截器是有顺序的,所以请根据你的实际需求类配需吧,你也可以把这两个拦截器放进拦截器栈中,,在action里面就可以只写拦截器栈的名字了






爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img