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控制的主要内容,如果未能解决你的问题,请参考以下文章