Struts2的登录验证和session控制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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控制。

以上是关于Struts2的登录验证和session控制的主要内容,如果未能解决你的问题,请参考以下文章

SSH学习-Struts2中的session

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

初学者做java的设置用户权限让管理员和用户登录不同界面

struts2的重复登陆问题

JAVA WEB 中登录的session的判断 如何控制用户权限可以访问那些东西

JSP中怎样用session保存并验证用户登录信息