拦截器代码: 

package mycrm.interceptor;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

import mycrm.domain.User;

public class PrivilegeInterceptor extends MethodFilterInterceptor {

    @Override
    protected String doIntercept(ActionInvocation invocation) throws Exception {
        //判断session是否有用户信息
        User existUser = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");
        if(existUser == null){
            //没有登陆,给出提示信息,回到登录页面
            //获取当前Action
             ActionSupport actionSupport = (ActionSupport) invocation.getAction();
             actionSupport.addActionError("没有权限,请登录后再访问!");
             //回到登录页面
             return actionSupport.LOGIN;
        }else{
            //已经登录,放行,执行下一个拦截器
            return invocation.invoke();
        }
    }

}

向配置文件添加拦截器:

<?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="action" extends="struts-default" namespace="/">

<!-- 定义拦截器 -->
<interceptors>
<interceptor name="privilegeInterceptor" class="mycrm.interceptor.PrivilegeInterceptor"/>
</interceptors>

<!-- 全局页面 -->
<global-results>
<result name="login">/login.jsp</result>
</global-results>

<!-- 配置Customer的Action -->
<action name="customer_*" class="mycrm.action.CustomerAction" method="{1}">

<result name="findAll">/jsp/customer/list.jsp</result>
<result  name="add">/jsp/customer/add.jsp</result>
<result name="addSuccess">/jsp/customer/list.jsp</result>

<!-- 添加拦截器,登录和注册不拦截 -->
<interceptor-ref name="privilegeInterceptor">
<param name="excludeMethods">login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>

</action>

<!-- 配置User的Action -->
<action name="user_*" class="mycrm.action.UserAction" method="{1}">

<result name="login">/login.jsp</result>
<result type="redirect">/index.jsp</result>

<!-- 添加拦截器,登录和注册不拦截 -->
<interceptor-ref name="privilegeInterceptor">
<param name="excludeMethods">login</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>

</action>

</package>
</struts>

 设置表单target放置页面嵌套:

  <FORM id=form1 name=form1 action="${pageContext.request.contextPath }/user_login.action" method=post target="_parent">                        

附:Struts2-CRM,拦截器实现权限访问的更多相关文章

  1. Struts2使用拦截器完成权限控制示例

    http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求:    要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...

  2. 简单理解Struts2中拦截器与过滤器的区别及执行顺序

    简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...

  3. Spring的AOP,Struts2的拦截器(Interceptor),以及springMVC的(interceptor)

    参考外链:http://www.ibm.com/developerworks/cn/java/j-lo-springaopfilter/ 1.首先,spring的AOP作用范围很广,可以使用Aspec ...

  4. struts2总结六: Struts2的拦截器

    一.Struts2的系统结构图

  5. Struts2中拦截器的使用与配置

    一,拦截器是什么? 拦截器是在Action执行之前和之后执行的代码,是一个类似于过滤器的类: 二,拦截器的作用 拦截器拦截Action的请求,在Action之前或之后实现某项功能: 三,拦截器的特点 ...

  6. java之struts2之拦截器

    1.struts2能完成数据的设置,数据的封装,数据的类型转换,数据的校验等等.struts2是如何来完成这些功能的?struts2的所有功能都是由拦截器来完成的. 2.拦截器是struts2的核心. ...

  7. (六)Struts2的拦截器

    一.简介 拦截器体系是struts2重要的组成部分.正是大量的内建拦截器完成了该框架的大部分操作. 比如params拦截器将请求参数解析出来,设置Action的属性.servletConfig拦截器负 ...

  8. Struts2 自定义拦截器

    自定义拦截器(权限管理),包含了对ajax和表单请求的拦截 package com.interceptor; import java.io.IOException; import java.io.Pr ...

  9. struts2之拦截器

    1. 为什么需要拦截器 早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足.可扩展性降低, Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于 ...

随机推荐

  1. FromBase64String 输入的不是有效的 Base-64 字符串,因为它包含非 Base-64 字符、两个以上的填充字符,或者填充字符间包含非法字符

    js前台: <input id="upload_img_input" v-on:change="onFileChange" type="file ...

  2. 【资源分享】Dll Injector(DLL注入器)

    *----------------------------------------------[下载区]----------------------------------------------* ...

  3. Python常用数据类型转换

    常用的数据类型转换 目标 了解类型转换的作用 掌握常用的类型转换 函数 说明 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ...

  4. LeetCode | No.2 两数相加

    ​题目描述 给出两个非空的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序的方式存储的,并且它们的每个节点只能存储一位数字.如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  5. 前后端分离之 跨域和JWT

    书接上回:https://www.cnblogs.com/yangyuanhu/p/12081525.html 前后端分离案例 现在把自己当成是前端,要开发一个前后分离的简单页面,用于展示学生信息列表 ...

  6. 喵星之旅-狂奔的兔子-linux安装

    一.前言 本文演示虚拟机安装,和真机区别可能在网卡驱动上有差异. 真机环境:CentOS Linux release 7.6.1810 (Core) 虚拟机(虽然centos系统自带虚拟机软件,但是习 ...

  7. The Preliminary Contest for ICPC Asia Xuzhou 2019 M. Longest subsequence(思维+序列自动机)

    序列自动机跑s串 假设k为s和t相同的长度,初始时相同长度为0 取s串中大于t[i]的最左边的位置,用n-tmp+1+i-1更新答案,tmp是最左端的位置 然后去t[i]相等的位置,走到下一位,如果下 ...

  8. 【PAT甲级】1085 Perfect Sequence (25 分)

    题意: 输入两个正整数N和P(N<=1e5,P<=1e9),接着输入N个正整数.输出一组数的最大个数使得其中最大的数不超过最小的数P倍. trick: 测试点5会爆int,因为P太大了.. ...

  9. socketserver tcp黏包

    socket (套接字) tcp(黏包现象原因) 传输中由于内核区缓冲机制(等待时间,文件大小),会在 发送端 缓冲区合并连续send的数据,也会出现在 接收端 缓冲区合并recv的数据给指定port ...

  10. LOJ 6279 数列分块入门3

    嗯... 题目链接:https://loj.ac/problem/6279 这道题在分块的基础上用vc数组记录,然后最后分三块,两边暴力枚举找前驱,中间lower_bound找前驱. AC代码: #i ...