struts2自定义 * 的示例代码
作者:rainumdo 发布时间:2021-12-01 16:24:52
标签:struts2, ,
题目:使用struts2自定义 * ,完成用户登陆才能访问权限的实现
在session中存放user变量表示用户登陆,若user为空则用户没有登陆,反之登陆
显示提示信息(请先登录)
定义 *
在struts.xml中定义 * 使用标签<Intercaptors>、<Intercapter>。
<interceptors>
<interceptor name="test" class="Intercaptor.Intercaptor" />
<interceptor-stack name="testStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="test" />
</interceptor-stack>
</interceptors>
注:当我们为某个action添加Intercaptor时就会放弃struts2的其他的 * ,所以我们要把自定义的 * 放在一个一个 * 栈中。
name属性就是Intercaptor.Intercaptor类在服务器上的一个实例
class属性就是这个 * 的的类
实现 *
* 的java类要实现Intercaptor这个接口和里面的方法intercept()。我们这里拦截的条件是用户是否登陆,也就是session中的user变量是否为空。
public class Intercaptor implements Interceptor{
public void destroy() {
}
public void init() {
}
public String intercept(ActionInvocation invocation) throws Exception {
Object user=ActionContext.getContext().getSession().get("user");
if(user!=null){
return invocation.invoke();
}
ActionContext.getContext().put("message", "请先登陆");
return "success";
}
}
实现业务逻辑
在action中添加 *
<action name="Action" class="Action.Action">
<interceptor-ref name="test"></interceptor-ref>
<result name="success">Message.jsp</result>
</action>
其他
action的实现
public class Action extends ActionSupport{
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String execute() throws Exception {
return "success";
}
}
index.jsp
<body>
用户状态:${user!=null?"已登陆":"未登陆"}<br>
<a href="UserLogin.jsp" rel="external nofollow" >用户登陆</a>
<a href="UserQuit.jsp" rel="external nofollow" >用户退出</a>
<form action="<%request.getContextPath(); %>/testIntercaptor/Action">
<input type="submit" value="登陆后的操作">
</form>
</body>
UserLogin.jsp
在request.getSesssion中存放user变量
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
登陆成功
<%
request.getSession().setAttribute("user", "user");
response.setHeader("refresh", "1;url=index.jsp");
%>
UserQuit.jsp
移除request.getSesssion中user变量
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
退出成功
<%
request.getSession().removeAttribute("user");
response.setHeader("refresh", "1;url=index.jsp");
%>
Message.jsp
简单是输出message和debug
<body>
${message } <br/>
<s:debug></s:debug>
</body>
来源:http://www.jianshu.com/p/fc9e8ef59790?utm_source=tuicool&utm_medium=referral


猜你喜欢
- 点击按钮,先自动进行下拉刷新,也可以手动刷新,刷新完后,最后就多一行数据。有四个选项卡。前两天导师要求做一个给本科学生预定机房座位的app,
- 首先什么是注解?@Override就是注解,它的作用是:1、检查是否正确的重写了父类中的方法。 2、标明代码,这是一个重写的方法。1、体现在
- 导读Spring Boot应用可以使用spring-boot-maven-plugin快速打包,构建一个可执行jar。Spring Boot
- Quartz是一款开源的定时任务调度框架,Quartz的官网是:http://www.quartz-s
- 本文实例讲述了C#实现Xml序列化与反序列化的方法。分享给大家供大家参考。具体实现方法如下:/// <summary>/// X
- 一、序言在日常一线开发过程中,总有列表转树的需求,几乎是项目的标配,比方说做多级菜单、多级目录、多级分类等,有没有一种通用且跨项目的解决方式
- 更新了AS 3.1.2之后,发现新建Kotlin类,类注释依然木有,没办法只有自己动手了。方法很简单,编辑File Header就可以啦。只
- 在高并发的系统中,往往需要在系统中做限流,一方面是为了防止大量的请求使服务器过载,导致服务不可用,另一方面是为了防止网络攻击。常见的限流方式
- 方法重写与之前的方法重载不同回顾一下方法重载,相同的方法名不同参数类型和参数数量以及参数顺序package Demo1;import jav
- Java提供了许多创建线程池的方式,并得到一个Future实例来作为任务结果。对于Spring同样小菜一碟,通过其scheduling包就可
- 单元测试是程序员对代码的自测,一般公司都会严格要求单元测试,这是对自己代码的负责,也是对代码的敬畏。一般单元测试都是测试Service层,下
- 前言CyclicBarrier和CountDownLatch这两个工具都是在java.util.concurrent包下,并且平时很多场景都
- 这两天学习了使用Path绘制贝塞尔曲线相关,然后自己动手做了一个类似QQ未读消息可拖拽的小气泡,效果图如下:最终效果图接下来一步一步的实现整
- 一、Code First 代码优先DbContext可以用于数据库优先,代码优先和模型优先的开发。DbContext主要包含一组非常易于使用
- 什么是MybatisMyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software fou
- 背景项目中我们经常会用搜索功能,普通的搜索我们可以用一个SQL的like也能实现匹配,但是搜索的核心需求是全文匹配,对于全文匹配,数据库的索
- 本文实例为大家分享了java实现学生成绩管理系统的具体代码,供大家参考,具体内容如下/* *@copyright by LzyRa
- 一、定义一个配置类,自定义RedisTemplate的序列化方式@Configurationpublic class RedisConfig
- Spring Boot读取配置文件1)通过注入ApplicationContext 或者 Environment对象来读取配置文件里的配置信
- <foreach>标签动态增删改查mybatis<foreach>有的时候在项目中需要查询某个列表时,可能会在代码中