struts2学习(6)自定义拦截器-登录验证拦截器

需求:对登录进行验证,用户名cy 密码123456才能登录进去;

   登录进去后,将用户存在session中;

其他链接要来访问(除了登录链接),首先验证是否登录,对这个进行拦截;

com.cy.model.User.java:

package com.cy.model;

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

}

com.cy.action.UserAction.java:

package com.cy.action;

import java.util.Map;

import com.cy.model.User;
import com.cy.service.UserService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

    private static final long serialVersionUID = 1L;

    private User user;
    private UserService userService = new UserService();
    private String error;

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    @Override
    public String execute() throws Exception {
        if(userService.login(user)){
            ActionContext actionContext = ActionContext.getContext();
            Map<String, Object> session = actionContext.getSession();
            session.put("currentUser", user);
            return SUCCESS;
        }else{
            this.error = "用户名或密码错误";
            return ERROR;
        }
    }

}

com.cy.action.GrilAction.java:

package com.cy.action;

import com.opensymphony.xwork2.ActionSupport;

public class GrilAction extends ActionSupport{
    private static final long serialVersionUID = 1L;

    @Override
    public String execute() throws Exception {
        System.out.println("看美女");
        return SUCCESS;
    }

}

com.cy.interceptor.LoginInterceptor.java:

package com.cy.interceptor;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class LoginInterceptor implements Interceptor{

    private static final long serialVersionUID = 1L;

    public void destroy() {
        System.out.println("LoginInterceptor销毁");
    }

    public void init() {
        System.out.println("LoginInterceptor初始化");
    }

    public String intercept(ActionInvocation invocation) throws Exception {
        System.out.println("在Action执行之前");
        ActionContext actionContext = invocation.getInvocationContext();
        Map<String, Object> session = actionContext.getSession();
        Object currentUser = session.get("currentUser");
        String result = null;
        if(currentUser != null){
            result = invocation.invoke();
        }else{
            HttpServletRequest request = (HttpServletRequest) invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
            request.setAttribute("error", "请先登录!");
            result = "error";
        }

        System.out.println("在Action执行之后");

        return result;
    }

}

com.cy.service.UserService.java:

package com.cy.service;

import com.cy.model.User;

public class UserService {

    public boolean login(User user){
        if("cy".equals(user.getUserName()) && "123456".equals(user.getPassword())){
            return true;
        }else{
            return false;
        }
    }
}

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="manage" namespace="/" extends="struts-default">
        <interceptors>
            <interceptor name="loginInterceptor" class="com.cy.interceptor.LoginInterceptor"></interceptor>

            <interceptor-stack name="myStack">
                <interceptor-ref name="loginInterceptor"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>
        </interceptors>

        <!-- package默认使用myStack 这个包下面的每个action默认使用myStack拦截器栈-->
        <default-interceptor-ref name="myStack"></default-interceptor-ref>

        <global-results>
            <result name="error">error.jsp</result>
        </global-results>

        <action name="gril" class="com.cy.action.GrilAction">
            <result name="success">success.jsp</result>

            <!-- 定义了默认的拦截器栈,这里就注释掉
                <interceptor-ref name="loginInterceptor"></interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
             -->
        </action>

        <action name="user" class="com.cy.action.UserAction">
            <result name="success">success.jsp</result>
            <!-- 因为登录的时候不需要进行登录验证,不需要使用loginInterceptor
                  因此这里就写defaultStack
                  写了defaultStack action就不会再使用其他的拦截器了。
             -->
            <interceptor-ref name="defaultStack"></interceptor-ref>
        </action>

    </package>

</struts>

success.jsp:

<body>
    当前用户: ${currentUser.userName}
</body>

error.jsp:

<body>
    错误信息:${error} <a href="login.jsp">登录</a>
</body>

login.jsp:

<body>
    <form action="user" method="post">
        用户名: <input type="text" name="user.userName"/><br>
        密码: <input type="text" name="user.password"/><br>
        <input type="submit" value="登录" />
    </form>
</body>

测试:

没有登录,直接访问gril链接:

进行登录,并且登录成功:

再次访问gril链接就ok了,console:

在Action执行之前
看美女
在Action执行之后

-------------

时间: 2024-10-23 10:54:47

struts2学习(6)自定义拦截器-登录验证拦截器的相关文章

spring登录验证拦截器和根据用户角色登录

大家都知道spring的用户登录拦截器,确实省去了程序员不少的精力,下面说说我在项目中使用的感受. 德安微信管理后台是管理多个微信帐号的平台,登录到平台的用户有三个角色,游客和微信帐号管理员.超级管理员.超级管理员负责建立新的微信帐号.建立新的微信帐号管理员:微信帐号管理员负责维护微信菜单:微信图文消息:处理微信事件,发布产品介绍专题等:游客的功能有浏览.下单.手机号绑定等.基于此我们分配了三个用户角色:ROLE_TRAVELER.ROLE_ADMIN.ROLE_SUPER分别对应游客.微信帐号

SpringMVC拦截器(实现登录验证拦截器)

本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现 当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面 核心代码 首先是index.jsp,显示链接 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 St

Filter实现登录验证拦截功能

既然是 Filter 实现的登录验证,首先自然是创建 Filter 实现类了,但是在创建 Filter 之前,我们先来看一个问题:怎么判断用户是否登录了? 看我们的登录代码: @RequestMapping("/login") public String login(LoginModel login, HttpServletRequest req, HttpServletResponse res, Model model) { HttpSession session = req.get

struts2学习笔记---自定义拦截器

什么是拦截器? struts2中拦截器分为Struts2定义好的拦截器和自定义的拦截器.其作用是在一个Action执行之前进行拦截,在Action执行之后又加入某些操作. 实现原理 当请求一个Action时,struts2会查找配置文件,并根据这个Action的配置实例化对应的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器. 拦截器的执行流程 1.对Action进行预处理.(正序执行) 2.拦截器自身决定该不该执行后续的拦截器(由invoke()方法的返回值决定).

struts2学习笔记(7)---数据验证之validateXxx()方法

validateXxx()方法 上一篇文章写了使用Action的validate()方法,validate()只能对action的所有方法进行验证,而要实现对action中特定的方法进行验证,就需要使用validateXxx()方法.validateXxx()只会校验action中方法名为xxx的方法.其中Xxx的第一个字母要大写. 源代码 UserAction.java package org.dny.action; import org.dny.model.User; import com.

Struts2学习第六课 实现登录登出功能

关于Struts2请求的扩展名问题: 1).org.apache.struts2包下的default.properties中配置了struts2应用的一些常量 2).struts.action.extension定义了当前struts2应用可以接受的请求的扩展名. 3).可以在struts.xml文件中以常量配置的方式修改default.properties所配置的常量. <constant name="struts.action.extension" value="a

学习笔记_过滤器应用(粗粒度权限控制(拦截是否登录、拦截用户名admin权限))

RBAC ->基于角色的权限控制 l  tb_user l  tb_role l  tb_userrole l  tb_menu(增.删.改.查) l  tb_rolemenu 1 说明 我们给出三个页面:index.jsp.user.jsp.admin.jsp. l  index.jsp:谁都可以访问,没有限制: l  user.jsp:只有登录用户才能访问: l  admin.jsp:只有管理员才能访问. 2 分析 设计User类:username.password.grade,其中grad

基于SSH2框架Struts2拦截器的登录验证实现(转)

大象在这里假设你已经弄清楚了Struts2拦截器的基本概念,可以进入实际运用了.那么我们在之前的基础上只需要做下小小的改变,就可以使用Struts2的拦截器机制实现登录的验证. 修改数据库 在user表中增加password字段,将初始密码都设为123,因为是示例所以采用明码,实际开发中,当然不能这样做,需要进行加密处理.再将name改为username,其实name字段可以不用改名,我这样做是为了命名规范,请注意,如果字段改为username,User类中的对应属性也要进行相应变化(如果你加注

python登录验证模块

#/usr/bin/env python2.7 #-*- coding:utf-8 -*- """ 功能:     登录验证模块 详细说明:     1.密码文件为passwd     2.passwd未创建或丢失,会提示:密码文件不存在,建议重新注册!!     3.未注册用户登录会提示:用户名不存在,请您先进行注册!     4.已注册用户登录时,忘记密码,尝试3次后密码还不正确则退出验证,等一会儿则可以重新登录     5.作为装饰器进行登录验证 ""