首页 > 代码库 > Struts2的登录验证和session控制
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控制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。