Struts2使用拦截器完成权限控制示例
http://aumy2008.iteye.com/blog/146952
Struts2使用拦截器完成权限控制示例
示例需求:
要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源;否则,系统直接转入登陆页面。
一、页面部分
1、登陆页面代码(login.jsp)
- <%@ page language="java" contentType="text/html; charset=GBK"%>
- <%@taglib prefix="s" uri="/struts-tags"%>
- <html>
- <head>
- <title><s:text name="loginPage" /></title>
- </head>
- <body>
- <!-- 使用form标签生成表单元素 -->
- <s:form action="login">
- <s:textfield name="username" label="%{getText('user')}" />
- <s:textfield name="password" label="%{getText('pass')}" />
- <s:submit value="%{getText('login')}" />
- </s:form>
- </body>
- </html>
2、登陆成功页面(welcome.jsp)
- <%@ page language="java" contentType="text/html; charset=GBK"%>
- <%@taglib prefix="s" uri="/struts-tags"%>
- <html>
- <head>
- <title><s:text name="succPage" /></title>
- <s:head />
- </head>
- <body>
- <s:text name="succTip" />
- <br />
- <!-- 欢迎,${sessionScope.user},您已经登录!
- ${sessionScope.pass}-->
- <p />
- <s:a href="show.action">show</s:a>
- <p />
- <s:a href="add.action">add</s:a>
- <p />
- <s:a href="qurey.action">qurey</s:a>
- </body>
- </html>
3、登陆失败页面(error.jsp)
- <%@ page language="java" contentType="text/html; charset=GBK"%>
- <%@taglib prefix="s" uri="/struts-tags"%>
- <html>
- <head>
- <title><s:text name="errorPage" /></title>
- </head>
- <body>
- <s:text name="failTip" />
- <p />
- <s:a href="login.jsp">return</s:a>
- </body>
- </html>
4、和权限有关的几个显示页面
(add.jsp)
- <%@ page language="java" contentType="text/html; charset=GBK"%>
- <%@taglib prefix="s" uri="/struts-tags"%>
- <html>
- <head>
- <title><s:text name="addPage"/></title>
- </head>
- <body>
- <s:text name="addTip"/>
- <p />
- <s:a href="login.jsp">return login</s:a>
- </body>
- </html>
(show.jsp)
- <%@ page language="java" contentType="text/html; charset=GBK"%>
- <%@taglib prefix="s" uri="/struts-tags"%>
- <html>
- <head>
- <title><s:text name="showPage"/></title>
- </head>
- <body>
- <s:text name="showTip"/>
- <p />
- <s:a href="login.jsp">return login</s:a>
- </body>
- </html>
(qurey.jsp)
- <%@ page language="java" contentType="text/html; charset=GBK"%>
- <%@taglib prefix="s" uri="/struts-tags"%>
- <html>
- <head>
- <title><s:text name="qureyPage"/></title>
- </head>
- <body>
- <s:text name="qureyTip"/>
- <p />
- <s:a href="login.jsp">return login</s:a>
- </body>
- </html>
二、Action部分(LoginAction.java)
- public class LoginAction extends ActionSupport {
- private static final long serialVersionUID = 1030294046920869257L;
- private String username;
- private String password;
- // 处理用户请求的execute方法
- public String execute() throws Exception {
- if (isInvalid(getUsername()))
- return INPUT;
- if (isInvalid(getPassword()))
- return INPUT;
- if ((getUsername().equals("mm") || getUsername().equals("aumy"))
- && getPassword().equals("111")) {
- // 通过ActionContext对象访问Web应用的Session
- ActionContext.getContext().getSession().put("user", getUsername());
- ActionContext.getContext().getSession().put("pass", getPassword());
- System.out.println(getUsername() + "----" + getPassword());
- return SUCCESS;
- } else {
- System.out.println(getUsername() + "----" + getPassword());
- return ERROR;
- }
- }
- private boolean isInvalid(String value) {
- return (value == null || value.length() == 0);
- }
- public String add() {
- return SUCCESS;
- }
- public String show() {
- return SUCCESS;
- }
- public String qurey() {
- return SUCCESS;
- }
- 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;
- }
- }
三、拦截器部分(AuthorityInterceptor.java)
- public class AuthorityInterceptor extends AbstractInterceptor {
- private static final long serialVersionUID = 1358600090729208361L;
- //拦截Action处理的拦截方法
- public String intercept(ActionInvocation invocation) throws Exception {
- // 取得请求相关的ActionContext实例
- ActionContext ctx=invocation.getInvocationContext();
- Map session=ctx.getSession();
- //取出名为user的session属性
- String user=(String)session.get("user");
- //如果没有登陆,或者登陆所有的用户名不是aumy,都返回重新登陆
- if(user!=null && user.equals("aumy")){
- return invocation.invoke();
- }
- //没有登陆,将服务器提示设置成一个HttpServletRequest属性
- ctx.put("tip","您还没有登录,请登陆系统");
- return Action.LOGIN;
- }
- }
四、配置文件部分
(struts.xml)
- <!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"/>
- <!--不受权限控制的Action请求配置-->
- <package name="non-authority" extends="struts-default" >
- <action name="login" class="com.aumy.struts.example.LoginAction">
- <result name="input">/login.jsp</result>
- <result name="error">/error.jsp</result>
- <result name="success">/welcome.jsp</result>
- </action>
- <action name="qurey" class="com.aumy.struts.example.LoginAction" method="qurey">
- <result name="success">/qurey.jsp</result>
- </action>
- </package>
- <!--受权限控制的Action请求配置-->
- <package name="authority" extends="struts-default">
- <interceptors>
- <!--定义一个名为authority的拦截器-->
- <interceptor
- class="com.aumy.struts.example.intercepter.AuthorityInterceptor"
- name="authority"/>
- <!--定义一个包含权限检查的拦截器栈-->
- <interceptor-stack name="mydefault">
- <!--配置内建默认拦截器-->
- <interceptor-ref name="defaultStack"/>
- <!--配置自定义的拦截器-->
- <interceptor-ref name="authority"/>
- </interceptor-stack>
- </interceptors>
- <default-interceptor-ref name="mydefault" />
- <!--定义全局Result-->
- <global-results>
- <result name="login">/login.jsp</result>
- </global-results>
- <action name="show" class="com.aumy.struts.example.LoginAction"
- method="show">
- <result name="success">/show.jsp</result>
- </action>
- <action name="add" class="com.aumy.struts.example.LoginAction"
- method="add">
- <result name="success">/add.jsp</result>
- </action>
- </package>
- </struts>
(struts.properties)
- struts.custom.i18n.resources=message.messageResouce
(web.xml)
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.4"
- xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- <display-name>Struts test</display-name>
- <filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- <welcome-file-list>
- <welcome-file>login.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
五、国际化资源文件(messageResouce.properties)
- loginPage=Login Page
- errorPage=Error Page
- succPage=Welcome Page
- failTip=Sorry,You can't log in!
- succTip=welcome,you has logged in!
- user=User Name
- pass=User Pass
- login=Login
- showPage=Show Page
- showTip=show a example!
- addPage=Add Page
- addTip=add a example!
- qureyPage=Qurey Page
- qureyTip=qurey a example!
Struts2使用拦截器完成权限控制示例的更多相关文章
- Struts2基础-4-2 -struts拦截器实现权限控制案例+ 模型驱动处理请求参数 + Action方法动态调用
1.新建项目,添加jar包到WEB-INF目录下的lib文件夹,并添加到builde path里面 整体目录结构如下 2.新建web.xml,添加struts2核心过滤器,和默认首页 <?xml ...
- 6、Struts2拦截器实现权限控制
1.创建如下项目结果 2.在com.entity包下创建 package com.entity; public class User { private String name; private St ...
- struts自己定义拦截器--登录权限控制
说明:该自己定义的拦截器实现用户登录的权限控制. login.jsp--->LoginAction--重定向-->MainAction--->main.jsp 一.1.整体的步骤: ...
- JavaWeb框架_Struts2_(三)---->Struts2的拦截器
2. Struts2的拦截器(使用拦截器实现权限控制) 2.1 拦截器的概述 拦截器是Struts2的核心组成部分,它可以动态的拦截Action调用的对象,类似与Servlet中的过滤器.Struts ...
- 简单理解Struts2中拦截器与过滤器的区别及执行顺序
简单理解Struts2中拦截器与过滤器的区别及执行顺序 当接收到一个httprequest , a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标 ...
- struts2之拦截器
1. 为什么需要拦截器 早期MVC框架将一些通用操作写死在核心控制器中,致使框架灵活性不足.可扩展性降低, Struts 2将核心功能放到多个拦截器中实现,拦截器可自由选择和组合,增强了灵活性,有利于 ...
- (六)Struts2的拦截器
一.简介 拦截器体系是struts2重要的组成部分.正是大量的内建拦截器完成了该框架的大部分操作. 比如params拦截器将请求参数解析出来,设置Action的属性.servletConfig拦截器负 ...
- Struts2 自定义拦截器
自定义拦截器(权限管理),包含了对ajax和表单请求的拦截 package com.interceptor; import java.io.IOException; import java.io.Pr ...
- struts2总结六: Struts2的拦截器
一.Struts2的系统结构图
随机推荐
- logback使用笔记
三大主要元素 looger:记录日志 appender:输出目的地 layout:输出格式 必要步骤: 一.引入包: import org.slf4j.Logger; import org.slf4j ...
- Bind Enum to ListControl
当使用MVVM时,相信你和我一样经常有这样的需求: 在ViewModel里定义了一个Enum,它必然是对应UI上的一个ListControl作为不同选项. 有一种做法是使用Converter,将Enu ...
- Bios里,把SATA Mode Selection改为AHCI无法启动
新装系统Win7_X64,将SATA Mode Selection改为AHCI后总是重启,baidu参考: SATA的硬盘就选AHCI(全称应该是SATA AHCI),AHCI可以提升硬盘的读写速度原 ...
- Oracle wrap 测试的一些细节问题
今天在做 wrap 的测试实验的时候,出现一个很奇怪的现象,就是加密不成功.具体表现为:1.加密后的文件大小为0kb. 2.加密后的文件仍然可视. 具体测试步骤如下: D:\Just4work\som ...
- Python获取两个ip之间的所有ip
int_ip = lambda x: '.'.join([str(x/(256**i)%256) for i in range(3,-1,-1)]) ip_int = lambda x:sum([25 ...
- poj 2175 Evacuation Plan 最小费用流判定,消圈算法
题目链接 题意:一个城市有n座行政楼和m座避难所,现发生核战,要求将避难所中的人员全部安置到避难所中,每个人转移的费用为两座楼之间的曼哈顿距离+1,题目给了一种方案,问是否为最优方案,即是否全部的人员 ...
- 常用DOS命令参数详解
一.DIR命令的格式: dir [D:][PATH][NAME][[/A][:attrib]][/o:[sorted][/s][/b][/l][/c[h] (1)dir /a:attrib 缺省包含所 ...
- BZOJ 3969 Low Power 解题报告
我们首先将所有电池排序,那么我们可以找到一组最优方案,使得一台机器的能量之差是相邻两电池的能量之差. 然后我们就二分这个答案,从前往后贪心地选这个数对,然后看是否所有的数对都是满足条件的. 假设这个数 ...
- 一些简单的问题. 2的10次方与k (涉及到b k m的要用乘来解读)
2的10次方是k k就表示2的10次方 2的16次方,解读为 2的6次方(64)*2的10次方(k) 简写为64k 64k=64*k 同理2的20次方 解读为2的10次方*2的10次方 k ...
- [codility]Equi-leader
http://codility.com/demo/take-sample-test/equileader 一开始想到从左和右两边开始扫取众数,但求众数又要重新扫一遍,这样复杂度就是O(n^2)了.此题 ...