版权声明:本文为博主原创文章,未经博主允许不得转载。

(1)配置web.xml,让xml加载struts2框架

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

(2)新建一个User实体类

package models;

public class User {

    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;
}
}

(3)新建一个LoginAction类,用来验证登录操作

package action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext; import models.User; public class LoginAction { 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 String login(){
//用户名或密码错误
if(!"admin".equals(this.username) || !"123456".equals(this.password)){
ActionContext.getContext().put("errorMsg", "用户名或密码错误!");
return Action.LOGIN;
}
//用户名和密码正确
else{
User user=new User();
user.setUsername(this.username);
user.setPassword(this.password);
ActionContext.getContext().getSession().put("user",user);
return Action.SUCCESS;
}
}
}

(4)新建一个HomeAction类

package action;

import com.opensymphony.xwork2.Action;

public class HomeAction {

    public String index(){
return Action.SUCCESS;
}
}

(5)新建一个LogoutAction类,用于登出操作

package action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext; public class LogoutAction { public String logout(){
ActionContext.getContext().getSession().remove("user");
return Action.SUCCESS;
}
}

(6)创建一个登录拦截器

package interceptor;

import models.User;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class LoginInterceptor extends AbstractInterceptor { @Override
public String intercept(ActionInvocation arg0) throws Exception { //从Session中获取user
Object user=arg0.getInvocationContext().getSession().get("user");
if(user==null){ //如果没有user对象
return Action.LOGIN; //返回login
}else{ //如果有登录
return arg0.invoke(); //返回Action中method返回的字符串
}
} }

(7)配置struts.xml

<?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> <constant name="struts.configuration.xml.reload" value="true"></constant> <package extends="struts-default" name="default" namespace="/">
<!-- 配置拦截器 -->
<interceptors>
<!-- 配置登录拦截器 -->
<interceptor name="loginInterceptor" class="interceptor.LoginInterceptor"></interceptor>
<interceptor-stack name="myInterceptor-stack">
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="loginInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors> <!-- 修改默认拦截器 -->
<default-interceptor-ref name="myInterceptor-stack"></default-interceptor-ref> <!-- 设置全局返回值 -->
<global-results>
<result name="login">/login.jsp</result>
</global-results> <!-- 配置登录、登出不需要拦截 ,设置拦截器为defaultStack -->
<action name="Login_login" class="action.LoginAction" method="login">
<result type="redirectAction">Home_index</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
<action name="Logout_logout" class="action.LogoutAction" method="logout">
<result type="redirect">/login.jsp</result>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action> <action name="*_*" class="action.{1}Action" method="{2}">
<result>/WEB-INF/{1}/{2}.jsp</result>
</action>
</package>
</struts>

(8)在WebRoot下新建一个login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"
contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> </head> <body>
<s:form method="post" action="/Login_login">
<s:textfield name="username" label="用户名"/>
<s:password name="password" label="密码"/>
<s:submit></s:submit>
</s:form> <s:property value="#errorMsg"/>
</body>
</html>

(9)在WebRoot/WEB-INF/Home下新建一个index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"
contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> </head> <body>
欢迎【<s:property value="#session.user.username"/>】登录 <a href="Logout_logout">退出</a>
</body>
</html>

struts2自定义登录拦截器的更多相关文章

  1. Struts2 在登录拦截器中对ajax请求的处理

    前言: 由于ajax请求不像http请求,可以直接进行页面跳转,你返回的所有东西,ajax都只会识别为一个字符串. 之前尝试的方法是在拦截器中返回一个标识给ajax,然后再在每一个ajax请求成功之后 ...

  2. struts2自定义Interceptor拦截器

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  3. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo

    理解 Interceptor拦截器类似于我们学过的过滤器,是可以在action执行前后执行的代码.是我们做web开发是经常使用的技术,比如权限控制,日志.我们也可以把多个interceptor连在一起 ...

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

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

  5. Struts2(十四)拦截器实现权限管理

    一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截 ...

  6. Struts2的核心——拦截器

    虽然以前已经学了很多的拦截器,但是在这里还是想重头梳理一下所有有关拦截器的知识,尤其是struts2中的拦截器 1:拦截器是什么? java里的拦截器是动态拦截Action调用的对象.它提供了一种机制 ...

  7. java struts2入门学习---拦截器学习

    一.拦截器,拦截器栈 1.拦截器的作用 拦截器本质上和servlet的过滤器是一样的.在struts2中,拦截器能够对Action前后进行拦截,拦截器是一个可插拨的,你可以选择使用拦截器,也可以卸载拦 ...

  8. Struts2之类范围拦截器和方法拦截器

    1.Struts2拦截器的体系结构 Struts2拦截器最大的特点是其透明性,即用户感觉不到它的存在,但我们在使用Struts2框架时,拦截器时时刻刻都在帮助我们处理很多事情. 包括: 文件上传 表单 ...

  9. Java进阶知识02 Struts2下的拦截器(interceptor)和 过滤器(Filter)

    一.拦截器 1.1.首先创建一个拦截器类 package com.bw.bms.interceptor; import com.opensymphony.xwork2.ActionContext; i ...

随机推荐

  1. bytes2HexString

    public static String bytes2HexString(byte[] b) { String r = ""; for (int i = 0; i < b.l ...

  2. [BZOJ4813][CQOI2017]小Q的棋盘(DP,贪心)

    4813: [Cqoi2017]小Q的棋盘 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 804  Solved: 441[Submit][Statu ...

  3. [BZOJ4818][SDOI2017]序列计数(动规+快速幂)

    4818: [Sdoi2017]序列计数 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 972  Solved: 581[Submit][Status ...

  4. 【Splay】Codeforces Round #424 (Div. 1, rated, based on VK Cup Finals) B. Cards Sorting

    Splay要支持找最左侧的最小值所在的位置.类似线段树一样处理一下,如果左子树最小值等于全局最小值,就查左子树:否则如果当前节点等于全局最小值,就查当前节点:否则查右子树. 为了统计答案,当然还得维护 ...

  5. 将HTML表格的每行每列转为数组,采集表格数据

    将HTML表格的每行每列转为数组,采集表格数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 //将HTML ...

  6. VB里的TEXT控件只能输入数字的代码

    " '先声明一个常量,并把你想禁用或允许输入的内容赋值给它 Private Sub Text1_KeyPress(KeyAscii As Integer) '只能输入数字 KeyAscii ...

  7. win32 打印机api

    ? 4. API之打印函数 AbortDoc 取消一份文档的打印 AbortPrinter 删除与一台打印机关联在一起的缓冲文件 AddForm 为打印机的表单列表添加一个新表单 AddJob 用于获 ...

  8. AS3.0 效率优化

    1.显示对象:1.1.静态的不需互动的图形,使用Shape对象.(eg:getSize(newShape())=236) 1.2.不需要时间轴的互动图形,使用Sprite对象.(eg:getSize( ...

  9. OpenShift蓝绿及灰度部署

    内容转自https://blog.csdn.net/jj_tyro/article/details/80136316, 并不断补充,感谢作者. 1.蓝绿部署 蓝绿部署实现的是全流量切换,适合于在测试完 ...

  10. linux面试题目--1

    Linux面试题目 填空题1. 在Linux系统中,以 (文件)方式访问设备 .2. Linux内核引导时,从文件/etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用i节 ...