Struts2使用Interceptor实现权限控制的应用实例详解

拦截器:是Struts2框架的核心,重点之重。因此,对于我们要向彻底学好Struts2.0.读源码和使用拦截器是必不可少的。少说了。下面就Interceptor在Struts2中的一个非常常用的例子进行解析。网上也找了很多的例子,感觉都是讲的不太详细,自己从网上找了许多资料,下面就自己对其理解进行分析。
     首先,权限控制,就是,当我们使用不同的用户对某个模块或是系统进行操作的时候可以根据其不同的权限进行不同的设置。本博文就其简单的分析一下,好让自己理解。我是对于一个登陆的用户,若是其没有登录成功到该系统,则当其在浏览器中直接输入地址进行访问的时候我自定义的拦截器AuthorityInterceptor.java类将会进行判断,从而达到进行权限的判断。禁止其直接进行访问,只有当我们成功登录之后,session中存在username=clark的Map设置的时候才可以访问相应的页面。从而达到了权限控制。代码如下:
自定义拦截器:
package com.interceptor;
import java.util.Map;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
 * 权限控制拦截器
 * @author Administrator
 *
 */
public class AuthorityInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation invocation) throws Exception {
//取得请求相关的ActionContext实例
ActionContext cxt = invocation.getInvocationContext();
Map session = cxt.getSession();
String username = (String)session.get("username");
//如果用户没有登录,或者是登录的用户名不是clark,都不准其登录
if(username != null && username.equals("clark")){
return invocation.invoke();//会自动调用下一个拦截器或者放行到Action的execute方法
}
//没有登录,将服务器提示设置成一个HttpServletRequest
cxt.put("tip", "您还没有登录,请登录系统");
return Action.LOGIN;
}
}
     Struts2 的Action
package com.action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private static final long serialVersionUID = 20130924L;
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public static long getSerialversionuid() {
return serialVersionUID;
}

@Override
public String execute() throws Exception {
if(isInvalid(getUsername())){
return INPUT;
}
if(isInvalid(getPassword())){
return INPUT;
}
if((getUsername().equals("clark"))&&(getPassword().equals("123456"))){
//通过ActionContext对象访问Web应用的Session
ActionContext.getContext().getSession().put("username", getUsername());
ActionContext.getContext().getSession().put("password", getPassword());
System.out.println(getUsername()+"---------"+getPassword());
return SUCCESS;
}else{
return ERROR;
}
}
public boolean isInvalid(String value) {
return (value == null || value.length() == 0);
}
public String add(){
return SUCCESS;
}
public String show(){
return SUCCESS;
}
public String query(){
return SUCCESS;
}
}

  struts.xml配置文件如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  "http://struts.apache.org/dtds/struts-2.0.dtd">
  <struts>
  <include file="struts-default.xml"></include>
  <!-- 不受权限控制的Action请求配置 -->
  <package name="non-authority" extends="struts-default">
  <action name="login" class="com.action.LoginAction">
  <result name="input">/login.jsp</result>
  <result name="error">/fail.jsp</result>
  <result name="success">/welcome.jsp</result>
  </action>
  <action name="query" class="com.action.LoginAction" method="query">
  <result name="success">/query.jsp</result>
  </action>
  </package>
  <!-- 受权限控制的Action请求配置 -->
  <package name="authority" extends="struts-default">
  <!-- 定义一个拦截器,用于权限控制 -->
  <interceptors>
  <interceptor name="authority" class="com.interceptor.AuthorityInterceptor">
  </interceptor>
  <interceptor-stack name="mydefault">
  <interceptor-ref name="defaultStack"></interceptor-ref>
  <interceptor-ref name="authority"></interceptor-ref>
  </interceptor-stack>
  </interceptors>
  <!-- 配置默认的interceptor -->
  <default-interceptor-ref name="mydefault"></default-interceptor-ref>
  <!-- 配置全局Result -->
  <global-results>
  <result name="login">/login.jsp</result>
  </global-results>
  <action name="show" class="com.action.LoginAction" method="show">
  <result name="success">/show.jsp</result>
  <!-- <interceptor-ref name="mydefault"></interceptor-ref>  -->
  </action>
  <action name="add" class="com.action.LoginAction" method="add">
  <result name="success">/add.jsp</result>
  <!-- <interceptor-ref name="mydefault"></interceptor-ref>-->
  </action>
  </package>
  </struts>
相应的jsp页面如下:
login.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>login page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
  <h1>欢迎来到登录页面</h1>
    <s:form action="login">
    <s:textfield name="username" label="用户名"/><br/>
    <s:textfield name="password" label="密码"/><br/>
    <s:submit value="登录"/><br/>
    </s:form>
  </body>
</html>
welcome.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>login success</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
    <s:text name="succTip" />
    <br>
    <p />
    <s:a href="show.action">show</s:a>
    <p />
    <s:a href="add.action">add</s:a>
    <p />
    <s:a href="query.action">query</s:a>
    <p />
  </body>
</html>

fail.jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>login fail</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
    <s:text name="failTip" />
    <br>
    <p />
    <s:a href="login.jsp">return</s:a>
  </body>
</html>

add.jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>add page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
    <s:text name="addTip" />
    <p/>
    <s:a href="login.jsp">return login</s:a>
  </body>
</html>


show.jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>show page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
    <s:text name="showTip" />
    <p/>
    <s:a href="login.jsp">return login</s:a>
  </body>
</html>

query,jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags"  prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>query page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
  </head>
  
  <body>
    <s:text name="queryTip" />
    <p/>
    <s:a href="login.jsp">return login</s:a>
  </body>
</html>


Struts2使用Interceptor实现权限控制的应用实例详解的更多相关文章

  1. 转:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

    原文地址:JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法.shiro认证与shiro授权 以下是部分内容,具体见原文. shiro介绍 什么是shiro shiro是Apache ...

  2. mysql用户授权、数据库权限管理、sql语法详解

    mysql用户授权.数据库权限管理.sql语法详解 —— NiceCui 某个数据库所有的权限 ALL 后面+ PRIVILEGES SQL 某个数据库 特定的权限SQL mysql 授权语法 SQL ...

  3. C#依赖注入控制反转IOC实现详解

    原文:C#依赖注入控制反转IOC实现详解 IOC的基本概念是:不创建对象,但是描述创建它们的方式.在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务.容器负责将这些联系在一起. ...

  4. 6、Struts2拦截器实现权限控制

    1.创建如下项目结果 2.在com.entity包下创建 package com.entity; public class User { private String name; private St ...

  5. struts2内置拦截器和自定义拦截器详解(附源码)

    一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截 ...

  6. Struts2实例详解(转载)

    Struts2(上) 一.        经典的MVC模式 二.        Struts1.x对MVC的实现 三.        Struts1.x的主要组件和作用 组件 作用 ActionSer ...

  7. Smarty section、foreach控制循环次数的实现详解

    <!--{ section name='i' loop=$a }--><!--{ if $smarty.section.i.index < 3 }--><!--{  ...

  8. DOM对象控制HTML无素——详解3

    创建元素节点createElement createElement()方法可创建元素节点.此方法可返回一个 Element 对象. 语法: document.createElement(tagName ...

  9. DOM对象控制HTML无素——详解2

    节点属性 在文档对象模型 (DOM) 中,每个节点都是一个对象.DOM 节点有三个重要的属性 : 1. nodeName : 节点的名称 2. nodeValue :节点的值 3. nodeType ...

随机推荐

  1. C# CheckedListBox控件的使用方法

    1. 加入项 checkedListBox1.Items.Add("蓝色"); checkedListBox1.Items.Add("红色"); checked ...

  2. qemu-kvm-1.1.0源代码中关于迁移的代码分析

    这篇文档基于qemu-kvm-1.1.0源代码进行分析. 首先,源代码中的hmp-commands.hx文件里有下面内容: { .name = "migrate",/* 在moni ...

  3. Git新建本地分支与远程分支关联问题:git branch --set-upstream

    Git新建本地分支与远程分支关联问题:git branch --set-upstream git在本地新建分支, push到remote服务器上之后,再次pull下来的时候,如果不做处理会报以下提示: ...

  4. jQuery中click()与trigger方法的区别

    click()可以执行单击事件,但是不可传参. $("button").click(function(){ alert("hello."); }); trigg ...

  5. 带CheckBox的TreeView网上出错问题解决办法

    问题描述:TreeView上传到服务器,预览效果发现节点图片不显示.展开合并功能缺失.解决办法: 以下是我个人的解决办法,最终的效果实现了,但是还有一点点小遗憾,就是页面上有基于微软的调用js的报错信 ...

  6. Global.asax使用1

    Application_start: 1.第一个访问网站的用户会触发该方法.(针对访问的是asp.net应用程序的类,及ashx,aspx等才会触发) 2. 通常会在该方法里定义一些系统变量,如聊天室 ...

  7. SQL Server 2008 geometry 数据类型

    摘自SQL Server 2008帮助 平面空间数据类型 geometry 是作为 SQL Server 中的公共语言进行时 (CLR) 数据类型实现的.此类型表示欧几里得(平面)坐标系中的数据. 注 ...

  8. SSH连接LINUX乱码解决方法

    1.vi /etc/sysconfig/i18n 将内容改为 LANG="zh_CN.GB18030" LANGUAGE="zh_CN.GB18030:zh_CN.GB2 ...

  9. iOS 发布证书错误 Your build settings specify a provisioning profile with the UUID, no provisioning profile was found

    解决办法 1.找到项目中的**.xcodeproj文件,点击右键,show package contents(打开包内容). 2.打开后找到project.pbxproj文件,用文本编辑器打开.其实就 ...

  10. 13年山东省赛 Mountain Subsequences(dp)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Mountain Subsequences Time Limit: 1 Sec   ...