Struts2的登录验证和session控制

今天由于软件工程大项目的需要,我学习了下Struts2的自定义拦截器的使用方法。

其实很简单,拦截器的思想就是在执行某个需要权限的action之前先进拦截器Action看一下是否符合要求,比如说是否有合法的session保存。

下面是各种配置文件:

1. 某package中的interceptors配置,这里没用 interceptor-stack,因为只需要一层过滤。

        <interceptors>
            <interceptor name="teacherInterceptor"
                         class="com.postgraduate.interceptors.TeacherLoginInterceptor" >
            </interceptor>
        </interceptors>

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

2.同一个package下的action配置,只是增加了一句

        <action name="toTeacherIndex" class="com.postgraduate.action.TeacherAction" method="getIndex">
            <result name="success">/teacher/teacher_index.jsp</result>
            <result name="error">/teacher/error.jsp</result>
            <interceptor-ref name="teacherInterceptor" />
        </action>

3.同时还需要实现一个Interceptor类,用来处理验证逻辑,其实就是个Action,只不过比普通的Action优先级高,而各Interceptor的优先级由stack决定。

public class TeacherLoginInterceptor extends AbstractInterceptor {

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        ActionContext ctx = invocation.getInvocationContext();
        Map<String,Object> session = ctx.getSession();
        Teacher teacher = (Teacher) session.get("teacher");
        if(teacher == null)
            return "login";
        else {
            return invocation.invoke();
        }
    }
}

4.登录action(无权限执行)中设置session:

    public String login() {
        int userId;
        try {
            userId = Integer.parseInt(user.getUserId());
        } catch (Exception e) {
            return "login";
        }
        if (type.equals("teacher")) {
            Teacher teacher = userDAO.loginTeacher(userId, user.getPassword());
            ActionContext.getContext().getSession().put("teacher", teacher);
            return "teacher";
        } else if (type.equals("student")) {
            Student student = userDAO.loginStudent(userId,user.getPassword());
            ActionContext.getContext().getSession().put("student", student);
            return "student";
        } else
            return "login";
    }

这样整套逻辑就通了,另外,如果不想让其他人直接通过网站目录访问jsp,可以将有权限的jsp放到WEB-INF目录下,只通过action控制。

时间: 2024-08-16 15:25:23

Struts2的登录验证和session控制的相关文章

[MVC学习笔记]5.使用Controller来代替Filter完成登录验证(Session校验)

      之前的学习中,在对Session校验完成登录验证时,通常使用Filter来处理,方法类似与前文的错误日志过滤,即新建Filter类继承ActionFilterAttribute类后重写OnActionExecuting方法,在RegisterGlobalFilters方法中注册新建的Filter类,之后直接在需要验证的Action前加上Filter标记即可. 1. 新建登陆校验类CheckLoginAttribute using System.Web.Mvc; namespace P

使用COOKIE实现登录 VS 使用SESSION实现登录

注:本文使用的代码基于PHP,其他语言逻辑同理. 一:使用COOKIE实现登录验证 使用cookie实现登录的方式,主要通过一些单向的加密信息进行验证.比如admin用户登录了之后,服务端生成一个cookie值:admin_1533006028_ bbf2c2b1ec5cfb62d0a30438d8d0305c ,这个cookie值包含用户名,cookie到期时间和一个信息签名.签名的信息为 "用户名_用户密码_cookie到期时间_盐" 比如:md5("admin_1533

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

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

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

ThinkPHP中利用SESSION实现用户登录验证的方法

用户登上一个主页无非有这么两种状态,一种是类似于游客的身份登录,另一种是曾经已经登陆过的身份即经过服务器验证过的身份登录. 针对这两种登录,主要说一下: 我们在使用thinkphp的时候,首先,他是不提高登录验证功能的,仅仅是在路径方面做的相对比较安全,因为我们如果不对登录身份进行充足的验证,用户就完全可以去试着登录你的后台管理,那么这是非常可怕的,所以,首先要明白一个非常重要的业务逻辑. 如果按照正常的输入用户名密码的方式进行登录,在跳转之前我们就应该写入session数据,然后用数据进行登录

struts2 学习(三) ----- 用户登录验证

下面是struts2 的第三个程序(用户登录验证)步骤:(需要新建login.jsp,Login.java和message.jsp) 1.增加Struts框架,步骤在第一篇中. 2.新建一个login.jsp.布局如下: 3.然后新建一个class,名为Login.java,代码如下: 4.在struts.xml文件中,代码如下: 5.新建message.jsp页面,代码如下: 6.OK,运行. **************************************************

玩转web之servlet(六)---session介绍及简单使用(登录验证中保存信息)

在浏览器与服务器进行交互时,往往需要把涉及到的一些数据保存下来,这时就需要使用cookie或session进行状态管理. 这篇文章先来说说session怎么用,首先在servlet中创建一个session来保存信息,举个例子,在做登陆验证时,如果登陆成功,需要将用户的信息保存到session中,怎么保存呢?下面给出代码: public class Login_Do extends HttpServlet { String order_name = ""; String order_pa

[Java][Spring][scurity]同步session控制,防止一个用户多次登录

[Spring][scurity]同步session控制.防止一个用户多次登录 假设你希望限制单个用户仅仅能登录到你的程序一次,Spring Security通过加入以下简单的部分支持这个功能. 1.你须要把以下的监听器加入到你的web.xml文件中,让Spring Security获得session生存周期事件: <listener> <listener-class> org.springframework.security.ui.session.HttpSessionEvent

使用session插件并且实现登录验证

var express = require('express'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var session = require('express-session'); var swig = require('swig'); var user = require('./modules/user'); var app = express(); /