案例47-crm练习登录校验拦截器

1 LoginInterceptor

package www.test.web.interceptor;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

//需求:希望除了登录功能以外,其它功能的访问都需要登录才可以操作。
public class LoginInterceptor extends MethodFilterInterceptor {

    @Override
    protected String doIntercept(ActionInvocation invocation) throws Exception {
        // 1.获得session
        Map<String, Object> session = ActionContext.getContext().getSession();
        // 2.获得登陆标识
        Object object = session.get("user");
        // 3.判断登陆标识是否存在
        if (object == null) {
            // 不存在=>没登录=>重定向到登录页面
            return "toLogin";
        } else {
            // 存在=>已经登陆=>放行
            return invocation.invoke();
        }

    }
}

2 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>
    <!-- 指定struts2是否以开发模式运行
            1.热加载主配置.(不需要重启即可生效)
            2.提供更多错误信息输出,方便开发时的调试
     -->
    <constant name="struts.devMode" value="true"></constant>
    <package name="crm" namespace="/" extends="struts-default" >
        <interceptors>
            <!--1注册拦截器 -->
            <interceptor name="loginInterceptor" class="www.test.web.interceptor.LoginInterceptor"></interceptor>
            <!--2注册拦截器栈 -->
            <interceptor-stack name="myStack">
                <!--引入自定义的拦截器(建议放在20的拦截器之前)  -->
                <interceptor-ref name="loginInterceptor">
                    <!--配置不需要拦截的方法  -->
                    <param name="excludeMethods">login,exit</param>
                </interceptor-ref>
                <!--引入20个默认拦截器  -->
                <interceptor-ref name="defaultStack"></interceptor-ref>
            </interceptor-stack>
        </interceptors>
        <!--3指定包中的默认拦截器  -->
        <default-interceptor-ref name="myStack"></default-interceptor-ref>

        <!--定义全局结果集  -->
        <global-results>
            <result name="toLogin">/login.jsp</result>
        </global-results>
        <global-exception-mappings>
            <!-- 如果出现名为java.lang.RuntimeException的异常,就跳转到名为error的结果 -->
            <exception-mapping result="error" exception="java.lang.RuntimeException"></exception-mapping>
        </global-exception-mappings>
        <action name="CustomerAction_*" class="www.test.web.action.CustomerAction" method="{1}" >
            <result name="list" >/jsp/customer/list.jsp</result>
            <result name="toList" type="redirectAction">
                 <param name="actionName">CustomerAction_list</param>
                 <param name="namespace">/</param>
             </result>
        </action>
        <action name="UserAction_*" class="www.test.web.action.UserAction" method="{1}" >
            <result name="toHome" type="redirect">/index.htm</result>
            <result name="error" type="dispatcher">/login.jsp</result>
        </action>
    </package>
</struts>

3 没有登录的时候让登录页面全屏显示

在login.jsp中加入下面的代码即可。

<script type="text/javascript">
    window.onload=function(){
        if(window.parent!=window){//如果是在框架中
            //就让框架页面跳转到登录页面
            window.parent.location.href="${pageContext.request.contextPath}/login.jsp";
        }
    };
</script>

原文地址:https://www.cnblogs.com/jepson6669/p/8531500.html

时间: 2024-07-30 07:25:12

案例47-crm练习登录校验拦截器的相关文章

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

后台权限校验拦截器

拦截器类 /* * 后台权限校验的拦截器 * *对没有登陆的用户,不可以进行访问 */ public class PrivilegeInterceptor extends MethodFilterInterceptor { @Override //执行拦截的方法 protected String doIntercept(ActionInvocation actionInvocation) throws Exception { //判断session中是否保存了后台用户的信息 AdminUser

Struts 2 类型转换器 输入校验 拦截器

Struts 2中内建了字符串类型和常见类型之间相互转换的转换器,能满足大多数转换需求,但不能完成字符串和User对象之间的转换. OGNL项目中有一个TypeConvert接口,这个接口是自定义类型转换器必须要实现的接口,OGNL还提供了一个实现类: DefaultTypeConverter,自定义类型转换器(UserConverter类)须重写DefaultTypeConverter类的convertValue()方法.该方法可以实现字符串和对象之前相互转换 注册局部类型转换器:注册局部类型

019医疗项目-模块一:用户身份校验拦截器的调试

这次调试发现两个问题: 主要如下: 1.在嵌入的页面中,如果session过期了,跳转到登陆页面 现象: 登陆页面是嵌入在页面中. 解决办法: 找到登录的jsp页面:login.jsp.然后修改里面的登陆提交的回调方法, 问题解决: 解决后如下: 还有问题: 问题2: 3.当执行一个提交操作时,session过期,应该跳转登陆页面,本系统提交返回是json(SubmitResultInfo) ,由于LoginInterceptor拦截器作用,拦截了,返回了登陆页面. 无法解析登陆页面内容. 问题

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 userNam

基于Springmvc的登录权限拦截器

1.什么是拦截器 拦截器是指通过统一拦截从浏览器发往服务端的请求来完成功能的增强. 使用场景:解决请求的共性问题(如:乱码问题,权限验证问题等) 2.拦截器的基本工作原理 springmvc可以通过配置过滤器来解决乱码问题 拦截器的工作原理和过滤器非常相似 3.实现拦截器 (1)编写拦截器类实现HandlerInterceptor接口 (2)将拦截器注册进Springmvc框架中 4.拦截器的方法介绍 (1)preHandle方法,在请求被处理之前进行调用(返回值:表示我们是否需要将当前的请求拦

细说vue axios登录请求拦截器

当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一个耗时耗力,这个时候我们可以用拦截器去进行统一的http请求拦截. 1.安装配置axios cnpm install --save axios 我们可以建一个js文件来做这个统一的处理,新建一个axios.js,如下 import axios from 'axios' import { Indicator } from 'mint-ui'; import { Toast } from 'min

拦截器案例

<!-- 公共的包,封装了通用的拦截器,通用的result --> <package name="netctoss" extends="json-default"> <interceptors> <!--登录检查拦截器 --> <interceptor name="loginInterceptor" class="com.born.interceptor.LoginIntercept