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

(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. getResourceAsStream 地址

    getResourceAsStream ()返回的是inputstream getResource()返回:URL Class.getResource("")    返回的是当前C ...

  2. [拒绝毒瘤的小清新系列] give you a tree

    题面在这里! (小声)这其实是我读错某题之后自己出的一道题...... 正解也很简单啦,直接扫描线+线段树水过(考虑一个合法的区间正好有 siz-1 对树上相邻的点对)23333 #include&l ...

  3. BZOJ 1257 [CQOI2007]余数之和sum(分块)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1257 [题目大意] 给出正整数n和k,计算j(n,k)=k mod 1 + k mod ...

  4. 【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem A. The Catcher in the Rye

    一个区域,垂直分成三块,每块有一个速度限制,问你从左下角跑到右上角的最短时间. 将区域看作三块折射率不同的介质,可以证明,按照光路跑时间最短. 于是可以二分第一个入射角,此时可以推出射到最右侧边界上的 ...

  5. 【树状数组逆序对】USACO.2011JAN-Above the median

    [题意] 给出一串数字,问中位数大于等于X的连续子串有几个.(这里如果有偶数个数,定义为偏大的那一个而非中间取平均) [思路] 下面的数据规模也小于原题,所以要改成__int64才行.没找到测试数据, ...

  6. (疯狂java)第四课(上)

    趁着周末玩爽了,兴致来了,继续玩玩java(估计再玩下去,就要被java玩了),第六章实在是很长,那就两个阶段来看吧. 1.java 7的增强包装类 这些包装类就是java上的基本类型,只不过人人基本 ...

  7. 误改sudoers的访问权限后的修复

     sudo: /etc/sudoers is mode 0777, should be 0440"问题的解决方法 ubuntu进入单用户模式,修改sudoers权限,修改root密码 1.重 ...

  8. Spring AOP动态代理

    出现org.springframework.aop.framework.ProxyFactoryBean cannot be cast to 错误 在类型转换的时候, 调用getObject()方法, ...

  9. Problem B: 年龄问题

    #include<stdio.h> int xx(int n,int m,int k) { int a; ) { a=k; } else { a=xx(n-,m,k)+m; } retur ...

  10. Excel 电子表格文件格式剖析

    Excel 电子表格文件格式,这种Excel和其他的Excel是不同的.他的本质上是一个Xml文件(用英文版的UtraEdit可以看到),所以他可以保存任何符号的字符,包括&(它在Xml文件中 ...