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

(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. 将Electron桌面应用转化为Win10的UWP应用

    如果有小伙伴不知道如何打包Electron桌面应用的,请戳我. 微软提供了一款快捷工具:electron-windows-store,用于将electron桌面应用打包成Windows10系统上.ap ...

  2. BZOJ 4247 挂饰(背包问题)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4247 [题目大意] JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将 ...

  3. TCP,UDP,IP总结

    一.传输层的主要功能是什么? 分割并重新组装上层提供的数据流,为数据流提供端到端的传输服务. 二.传输层如何区分不同应用程序的数据流? 因为,对应传输层而言,它只需要知道目标主机上的哪个服务程序来响应 ...

  4. light oj 1236 - Pairs Forming LCM & uva 12546 - LCM Pair Sum

    第一题给定一个大数,分解质因数,每个质因子的个数为e1,e2,e3,……em, 则结果为((1+2*e1)*(1+2*e2)……(1+2*em)+1)/2. 代码如下: #include <st ...

  5. Problem G: 零起点学算法102——删除字符

    #include<stdio.h> #include<string.h> int main() { ],a; while(gets(ch)!=NULL) { scanf(&qu ...

  6. 用GDB 调试Java程序

      陈皓 http://blog.csdn.net/haoel 背景 想要使用GDB调试程序,就需要用GNU的编译器编译程序.如:用GCC编译的C/C++的程序,才能用GDB调试.对于Java程序也是 ...

  7. Visual Studio Code 安装 RUST

    1.下载RUST源码 https://static.rust-lang.org/dist/rustc-1.18.0-src.tar.gz ,解压到C盘   C:\rustc-1.18.0-src 2. ...

  8. Visio中旋转文本框与箭头平行

    如图想要让文本框和箭头平行,按住shift,可以画出水平或者垂直的线,线是斜的,用文本框来标识,要框和线平行,那可以这样做: 打开视图  -  任务窗格 - 大小和位置,然后先单击选中斜线 左下角倒数 ...

  9. Express重定向

    var express = require('express'); var app = express(); app.get('/',function(req,res){ res.redirect(' ...

  10. Ubuntu下Wine使用教程

    转自:http://blog.csdn.net/wangchangshuai0010/article/details/12057251 用了段时间的Ubuntu,感觉很好!可是工作的时候还是要用到 w ...