S2SH项目登陆拦截的回顾(补)
2013-07-25 18:07
141 查看
之前学三大框架的时候也没怎么做总结,这次回顾就把总结写一下。
搭建好S2SH的框架后,在web-INF下建立对应对应的文件夹里边放着不能由URL直接访问的那些页面。在WEB-INF下的页面都是不能直接访问的。同时,CSS和JS还有图片的文件夹和WEB-INF所在的文件夹是同级的。
在这样的情况下,除了登陆的login.jsp能被url访问外,其他的页面都需要通过action来进行跳转控制。那么现在就需要对未登录的非法action请求进行控制。通过struts2的拦截器来实现。实现如下:
写一个拦截器:
在loginAction中的execute方法中,验证成功后把用户名写到session中:
这样就完成了所有的步骤。当然了,这只是个实验而已~具体的程序还在不断地修修补补中。
搭建好S2SH的框架后,在web-INF下建立对应对应的文件夹里边放着不能由URL直接访问的那些页面。在WEB-INF下的页面都是不能直接访问的。同时,CSS和JS还有图片的文件夹和WEB-INF所在的文件夹是同级的。
在这样的情况下,除了登陆的login.jsp能被url访问外,其他的页面都需要通过action来进行跳转控制。那么现在就需要对未登录的非法action请求进行控制。通过struts2的拦截器来实现。实现如下:
<interceptors> <interceptor name="loginJudge" class="com.rbac.interceptor.UsrLoginInterceptor"> </interceptor> <!-- 自定义拦截器栈--> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="loginJudge"> </interceptor-ref> <interceptor-ref name="defaultStack"> </interceptor-ref> </interceptor-stack> </interceptors> <!-- 将自定义拦截器栈设置默认的拦截器 --> <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref> <global-results> <result name="login" type="redirect">/login.jsp</result> </global-results>
写一个拦截器:
package com.rbac.interceptor; import java.util.Map; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.AbstractInterceptor; import com.rbac.action.LoginAction; public class UsrLoginInterceptor extends AbstractInterceptor{ //先判断用户是否登陆,如果还没有登陆,若没有登陆则为非法请求,进行拦截。 @Override public String intercept(ActionInvocation arg0) throws Exception { //判断请求是否为登陆的请求,如果是登陆请求则不拦截。 if(LoginAction.class==arg0.getAction().getClass()) { return arg0.invoke(); } //如果是其他action的请求,进行拦截 Map map = arg0.getInvocationContext().getSession(); if(null==map.get("username")) { return Action.LOGIN; } return arg0.invoke(); } }
在loginAction中的execute方法中,验证成功后把用户名写到session中:
public String execute() throws Exception { String hql="from Master where name=? and password=?"; Map map = ActionContext.getContext().getSession(); if( hibernateTemplate.find(hql, new String[]{username,password}).size()==0) { return LOGIN; }else{ map.put("username", username); return SUCCESS; } }
这样就完成了所有的步骤。当然了,这只是个实验而已~具体的程序还在不断地修修补补中。
<interceptors> <interceptor name="loginJudge" class="com.rbac.interceptor.UsrLoginInterceptor"> </interceptor> <!-- 自定义拦截器栈--> <interceptor-stack name="myDefaultStack"> <interceptor-ref name="loginJudge"> </interceptor-ref> <interceptor-ref name="defaultStack"> </interceptor-ref> </interceptor-stack> </interceptors>
相关文章推荐
- Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】
- 个人项目-图书管理系统登陆功能模拟
- Android实时监控项目第二篇:登陆界面的设计
- 练手小项目(4)安全卫士——黑名单拦截,广播和服务的加入进行拦截
- javaee学习之路(二)xml解析项目之登陆注册
- Android中关于登陆拦截逻辑流程(Intent传递使用步骤)
- 【vue+axios】一个项目学会前端实现登录拦截
- 项目回顾 (今天才能上网……都快忘了 )
- 关于我的第一个项目的登陆模块心得
- 近两年项目回顾系列——基于MINA+Flex的即时通讯系统
- android平台 使用Talarik Platform给项目添加登陆注册云端保存功能
- 小KING教你做android项目(二)---实现登陆页面并跳转和简单的注册页面
- Java的web项目中使用cookie保存用户登陆信息
- 0525 项目回顾7.0
- 项目案例分享五:AD升级后无法登陆
- 回顾项目失败原因
- android入门_采用android-async-http开源项目的GET方式或POST方式实现登陆案例
- java web项目中的拦截未登录用户的问题
- 纳税服务系统【登陆、权限拦截、页面嵌套】
- 关于php项目的开发回顾总结第五章-----BUG之美