http://aumy2008.iteye.com/blog/146952

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

示例需求: 
   要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源;否则,系统直接转入登陆页面。

一、页面部分 
1、登陆页面代码(login.jsp)

  1. <%@ page language="java" contentType="text/html; charset=GBK"%>
  2. <%@taglib prefix="s" uri="/struts-tags"%>
  3. <html>
  4. <head>
  5. <title><s:text name="loginPage" /></title>
  6. </head>
  7. <body>
  8. <!-- 使用form标签生成表单元素 -->
  9. <s:form action="login">
  10. <s:textfield name="username" label="%{getText('user')}" />
  11. <s:textfield name="password" label="%{getText('pass')}" />
  12. <s:submit value="%{getText('login')}" />
  13. </s:form>
  14. </body>
  15. </html>

2、登陆成功页面(welcome.jsp)

  1. <%@ page language="java" contentType="text/html; charset=GBK"%>
  2. <%@taglib prefix="s" uri="/struts-tags"%>
  3. <html>
  4. <head>
  5. <title><s:text name="succPage" /></title>
  6. <s:head />
  7. </head>
  8. <body>
  9. <s:text name="succTip" />
  10. <br />
  11. <!-- 欢迎,${sessionScope.user},您已经登录!
  12. ${sessionScope.pass}-->
  13. <p />
  14. <s:a href="show.action">show</s:a>
  15. <p />
  16. <s:a href="add.action">add</s:a>
  17. <p />
  18. <s:a href="qurey.action">qurey</s:a>
  19. </body>
  20. </html>

3、登陆失败页面(error.jsp)

  1. <%@ page language="java" contentType="text/html; charset=GBK"%>
  2. <%@taglib prefix="s" uri="/struts-tags"%>
  3. <html>
  4. <head>
  5. <title><s:text name="errorPage" /></title>
  6. </head>
  7. <body>
  8. <s:text name="failTip" />
  9. <p />
  10. <s:a href="login.jsp">return</s:a>
  11. </body>
  12. </html>

4、和权限有关的几个显示页面 
(add.jsp)

  1. <%@ page language="java" contentType="text/html; charset=GBK"%>
  2. <%@taglib prefix="s" uri="/struts-tags"%>
  3. <html>
  4. <head>
  5. <title><s:text name="addPage"/></title>
  6. </head>
  7. <body>
  8. <s:text name="addTip"/>
  9. <p />
  10. <s:a href="login.jsp">return login</s:a>
  11. </body>
  12. </html>

(show.jsp)

  1. <%@ page language="java" contentType="text/html; charset=GBK"%>
  2. <%@taglib prefix="s" uri="/struts-tags"%>
  3. <html>
  4. <head>
  5. <title><s:text name="showPage"/></title>
  6. </head>
  7. <body>
  8. <s:text name="showTip"/>
  9. <p />
  10. <s:a href="login.jsp">return login</s:a>
  11. </body>
  12. </html>

(qurey.jsp)

  1. <%@ page language="java" contentType="text/html; charset=GBK"%>
  2. <%@taglib prefix="s" uri="/struts-tags"%>
  3. <html>
  4. <head>
  5. <title><s:text name="qureyPage"/></title>
  6. </head>
  7. <body>
  8. <s:text name="qureyTip"/>
  9. <p />
  10. <s:a href="login.jsp">return login</s:a>
  11. </body>
  12. </html>

二、Action部分(LoginAction.java)

  1. public class LoginAction extends ActionSupport {
  2. private static final long serialVersionUID = 1030294046920869257L;
  3. private String username;
  4. private String password;
  5. // 处理用户请求的execute方法
  6. public String execute() throws Exception {
  7. if (isInvalid(getUsername()))
  8. return INPUT;
  9. if (isInvalid(getPassword()))
  10. return INPUT;
  11. if ((getUsername().equals("mm") || getUsername().equals("aumy"))
  12. && getPassword().equals("111")) {
  13. // 通过ActionContext对象访问Web应用的Session
  14. ActionContext.getContext().getSession().put("user", getUsername());
  15. ActionContext.getContext().getSession().put("pass", getPassword());
  16. System.out.println(getUsername() + "----" + getPassword());
  17. return SUCCESS;
  18. } else {
  19. System.out.println(getUsername() + "----" + getPassword());
  20. return ERROR;
  21. }
  22. }
  23. private boolean isInvalid(String value) {
  24. return (value == null || value.length() == 0);
  25. }
  26. public String add() {
  27. return SUCCESS;
  28. }
  29. public String show() {
  30. return SUCCESS;
  31. }
  32. public String qurey() {
  33. return SUCCESS;
  34. }
  35. public String getUsername() {
  36. return username;
  37. }
  38. public void setUsername(String username) {
  39. this.username = username;
  40. }
  41. public String getPassword() {
  42. return password;
  43. }
  44. public void setPassword(String password) {
  45. this.password = password;
  46. }
  47. }

三、拦截器部分(AuthorityInterceptor.java)

  1. public class AuthorityInterceptor extends AbstractInterceptor {
  2. private static final long serialVersionUID = 1358600090729208361L;
  3. //拦截Action处理的拦截方法
  4. public String intercept(ActionInvocation invocation) throws Exception {
  5. // 取得请求相关的ActionContext实例
  6. ActionContext ctx=invocation.getInvocationContext();
  7. Map session=ctx.getSession();
  8. //取出名为user的session属性
  9. String user=(String)session.get("user");
  10. //如果没有登陆,或者登陆所有的用户名不是aumy,都返回重新登陆
  11. if(user!=null && user.equals("aumy")){
  12. return invocation.invoke();
  13. }
  14. //没有登陆,将服务器提示设置成一个HttpServletRequest属性
  15. ctx.put("tip","您还没有登录,请登陆系统");
  16. return Action.LOGIN;
  17. }
  18. }

四、配置文件部分 
(struts.xml)

  1. <!DOCTYPE struts PUBLIC
  2. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  3. "http://struts.apache.org/dtds/struts-2.0.dtd">
  4. <struts>
  5. <include file="struts-default.xml"/>
  6. <!--不受权限控制的Action请求配置-->
  7. <package name="non-authority" extends="struts-default" >
  8. <action name="login" class="com.aumy.struts.example.LoginAction">
  9. <result name="input">/login.jsp</result>
  10. <result name="error">/error.jsp</result>
  11. <result name="success">/welcome.jsp</result>
  12. </action>
  13. <action name="qurey" class="com.aumy.struts.example.LoginAction" method="qurey">
  14. <result name="success">/qurey.jsp</result>
  15. </action>
  16. </package>
  17. <!--受权限控制的Action请求配置-->
  18. <package name="authority" extends="struts-default">
  19. <interceptors>
  20. <!--定义一个名为authority的拦截器-->
  21. <interceptor
  22. class="com.aumy.struts.example.intercepter.AuthorityInterceptor"
  23. name="authority"/>
  24. <!--定义一个包含权限检查的拦截器栈-->
  25. <interceptor-stack name="mydefault">
  26. <!--配置内建默认拦截器-->
  27. <interceptor-ref name="defaultStack"/>
  28. <!--配置自定义的拦截器-->
  29. <interceptor-ref name="authority"/>
  30. </interceptor-stack>
  31. </interceptors>
  32. <default-interceptor-ref name="mydefault" />
  33. <!--定义全局Result-->
  34. <global-results>
  35. <result name="login">/login.jsp</result>
  36. </global-results>
  37. <action name="show" class="com.aumy.struts.example.LoginAction"
  38. method="show">
  39. <result name="success">/show.jsp</result>
  40. </action>
  41. <action name="add" class="com.aumy.struts.example.LoginAction"
  42. method="add">
  43. <result name="success">/add.jsp</result>
  44. </action>
  45. </package>
  46. </struts>

(struts.properties)

  1. struts.custom.i18n.resources=message.messageResouce

(web.xml)

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.4"
  3. xmlns="http://java.sun.com/xml/ns/j2ee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
  6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  7. <display-name>Struts test</display-name>
  8. <filter>
  9. <filter-name>struts2</filter-name>
  10. <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  11. </filter>
  12. <filter-mapping>
  13. <filter-name>struts2</filter-name>
  14. <url-pattern>/*</url-pattern>
  15. </filter-mapping>
  16. <welcome-file-list>
  17. <welcome-file>login.jsp</welcome-file>
  18. </welcome-file-list>
  19. </web-app>

五、国际化资源文件(messageResouce.properties)

    1. loginPage=Login Page
    2. errorPage=Error Page
    3. succPage=Welcome Page
    4. failTip=Sorry,You can't log in!
    5. succTip=welcome,you has logged in!
    6. user=User Name
    7. pass=User Pass
    8. login=Login
    9. showPage=Show Page
    10. showTip=show a example!
    11. addPage=Add Page
    12. addTip=add a example!
    13. qureyPage=Qurey Page
    14. qureyTip=qurey a example!

Struts2使用拦截器完成权限控制示例的更多相关文章

  1. Struts2基础-4-2 -struts拦截器实现权限控制案例+ 模型驱动处理请求参数 + Action方法动态调用

    1.新建项目,添加jar包到WEB-INF目录下的lib文件夹,并添加到builde path里面 整体目录结构如下 2.新建web.xml,添加struts2核心过滤器,和默认首页 <?xml ...

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

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

  3. struts自己定义拦截器--登录权限控制

    说明:该自己定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.整体的步骤: ...

  4. JavaWeb框架_Struts2_(三)---->Struts2的拦截器

    2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...

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

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

  6. struts2之拦截器

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

  7. (六)Struts2的拦截器

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

  8. Struts2 自定义拦截器

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

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

    一.Struts2的系统结构图

随机推荐

  1. Codeforces Round #344 (Div. 2) C. Report

    Report 题意:给长度为n的序列,操作次数为m:n and m (1 ≤ n, m ≤ 200 000) ,操作分为t r,当t = 1时表示将[1,r]序列按非递减排序,t = 2时表示将序列[ ...

  2. 设置Tomcat应用自动部署目录

    只需要在Tomcat/conf目录下面新建文件夹Catalina/localhost,然后再localhost文件夹下面新建一个[应用名字.xml]文件即可,有多少个应用就新建多少个xml文件即可,x ...

  3. WPF获取控件的句柄

    在WinForm中,获得句柄是一件很容易的事情,This.Handle或者Control.Handle就可以,最近在WPF的开发中发现找不到这个属性,一番查找资料后找到了两种方式. 1,使用Windo ...

  4. 银联SDK

    最近在开发一个app,需要调用银联的sdk控件,银联提供的demo可以正常运行,但是自己的程序却怎么都编译不通过,到底有哪些需要注意的呢?? 具体的有可能会出现哪些错误我就不列举了,我只是提下有哪些需 ...

  5. 魔兽争霸Ⅲ运行时不能初始化directX的错误解决

    运行魔兽争霸3不能初始化DirectX错误这样解决: 1:在运行中输入(win+r):dxdiag,查看显示栏,确定电脑已安装好directx 8.1以上,且下面的三个加速都已开启. 2:如果没有安装 ...

  6. MVC5 ModelBinder

    MVC5 ModelBinder 什么是ModelBinding ASP.NET MVC中,所有的请求最终都会到达某个Controller中的某个Action并由该Action负责具体的处理和响应.为 ...

  7. iOS+JSPatch在线修改app功能-b

    什么是热更新? 举个例子,你的app上架了,但是突然想添加个小功能,那么你有两种方法 第一种方法:在原生代码中修改源代码,然后提交到appStore,这个过程真是很漫长...虽然最近我提交的都是一两天 ...

  8. 用jQuery在IFRAME里取得父窗口的某个元素的值

    收集网上的一些示例: 用jQuery在IFRAME里取得父窗口的某个元素的值 只好用DOM方法与jquery方法结合的方式实现了 1.在父窗口中操作 选中IFRAME中的所有单选钮 $(window. ...

  9. CSS3画三角形原理

    1.首先看一下画出一个下三角形完整的代码及效果图 #trangle1-up{ width:; height:; border-left:50px solid transparent; border-r ...

  10. GDB多进程调试(转)

    http://www.cnblogs.com/ggjucheng/archive/2011/12/15/2288710.html GDB 是 linux 系统上常用的 c/c++ 调试工具,功能十分强 ...