struts2自定义登录拦截器

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

(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>
时间: 2024-10-12 12:53:31

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

struts2自定义Interceptor拦截器

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html> 4 <html> 5 <head> 6 <meta charset="UTF-8"> 7 <title>struts2的一个例子</t

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

一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截器,拦截器才可以正常的工作和运行.Struts 2已经为您提供丰富多样的,功能齐全的拦截器实现.大家可以至struts2的jar包内的struts-default.xml查看关于默认的拦截器与 拦截器链的配置.内置拦截器虽然在struts2中都定义了,但是并不是都起作用的.因为并不是所有拦截器都被加

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

一.认识拦截器 拦截器也是一个类 拦截器可以在Action被调用之前和之后执行代码 框架很多核心功能是拦截器实现的 拦截器的特点: 拦截器自由组合,增强了灵活性.扩展性.有利于系统解耦 拦截器可以拦截Action请求 在访问的Action执行之前和执行之后执行代码实现某项功能 Struts2: 大部分功能是在拦截器中实现的如:接收输入的参数,数据验证,文件上传,国际化等 应用程序: 需要在Action执行的前后执行特定功能 Action执行时间统计,Action访问权限管理 Action添加功能

SpringMVC之Interceptor拦截器之登录拦截器

SpringMVC的拦截器是主要作用是拦截用户请求到后台之间的请求,在进入后台之前可以对其进行权限认证和用户登录的限制. 1.定义拦截器: springmvc中拦截器中主要有两种方式:第一种是实现HandleInterceptor接口,重写里面的方法:第二种是实现WebRequestInterceptor接口,同样的重写里面的方法,实现自己自定义的逻辑处理. 1.实现handleInterceptor接口: 接口中定义了三个方法:preHandle(requsest,response.handl

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

转发: https://www.cnblogs.com/amosli/p/3521872.html 一.拦截器,拦截器栈 1.拦截器的作用 拦截器本质上和servlet的过滤器是一样的.在struts2中,拦截器能够对Action前后进行拦截,拦截器是一个可插拨的,你可以选择使用拦截器,也可以卸载拦截器. 2.拦截器执行顺序 在struts.xml文件中,<intercepto-ref/>中先引用的先执行,后引用的后执行.如果某个拦截器出错或不允许通过,那么下一个拦截器是不允许执行的. 需要拦

struts2入门之拦截器

1.拦截器的执行时间:在action对象创建之后,在具体的方法执行之前: 2.拦截器底层实现原理:用到AOP思想和责任链模式:AOP:面向切面编程,通俗的讲就是当某个功能模块要增加某一项功能时,尽可能不去修改源代码而是通过其他的方式来达到相同的效果,比如通过配置文件等方式:责任链模式和过滤链模式有点相似,过滤链模式是指比如,一个请求由多个过滤器进行过滤,每个过滤器进行放行之后才能到下一个过滤器,最后实现目的:但是责任链模式,比如要执行多个操作,有添加,修改,删除三个操作,首先执行添加操作,添加操

Struts2自己定义拦截器实例—登陆权限验证

版本号:struts2.1.6 此实例实现功能:用户须要指定username登陆,登陆成功进入对应页面运行操作,否则返回到登陆页面进行登陆,当直接訪问操作页面(登陆后才干訪问的页面)时则不同意,须返回登陆页面. 代码例如以下: 一.页面 login.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUB

springBoot 登录拦截器

1.首选创建一个继承HandlerInterceptor的拦截器 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; /** * 拦截器 */

自定义注解+拦截器实现权限控制

根据5.2中的讲解,当监控high priority queue的PDSP channel设定好后,那么与之对应的event就知道了(PDSP channel与event一一对应)(注意5.x讲的是中断的配置,并不是exception的配置,4.x讲的是exception) 中断event与ISR配置代码如下,目的是使event与ISR建立联系: /*Configure event*/ EventCombinerEventConfig( systemEvent,  (TEventCombiner