您的位置:首页 > 其它

018医疗项目-模块一:用户身份校验拦截器的编写

2016-11-17 19:57 323 查看
这个身份拦截器的作用是为了防止用户没有登录,在URL中输入地址就去访问那么系统页面。比如:

没有拦截器的情况下:



直接在URL重中输入first.action直接进入到了页面。

其实不能这样的,我们都没有登录,怎么可以直接进入系统呢。

我们变成编写的身份验证器实现的就是这么一个效果:输入first.action之后:



会自动跳转到登录界面。

下面给出具体的实现:

我们来给吃具体的实现,想法是,我们自己写一个继承HandlerInterceptor的类,当做拦截器,然后在springmvc配置文件中配置它。

好的,我接下来给出具体代码:

package yycg.base.action.HandlerInterceptor;

import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import yycg.base.pojo.vo.ActiveUser;
import yycg.base.process.context.Config;
import yycg.util.ResourcesUtil;
/**
*
* @ClassName: LoginInterceptor
* @Description: 拦截器,主要是拦截用户在没有登录的情况下去访问。需要在springmvc中进行配置。
* @author A18ccms a18ccms_gmail_com
* @date 2016年11月17日 下午4:05:28
*
*/
/*
*
* 这个拦截器还要在SpirngMvc中配置才可以用的。
*
*
*
*/
public class LoginInterceptor implements HandlerInterceptor {

/**
*
* 执行时间:进入到action方法之前,
* 使用场景:用于用户的认证,用户的授权拦截。
*
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {

HttpSession session=request.getSession();
ActiveUser activeUser=(ActiveUser)session.getAttribute(Config.ACTIVEUSER_KEY);//从session中取出用户对象,之前已经存入了session了。
if(activeUser!=null)//说明从Session中取出来用户对象,那么就放行
{
return true;

}
//如果activeUser是空的,那就是说明用户没有登录。那么我们就要检测用户的要浏览的是不是公共的界面,如果是的话,也可以放行。
List<String> open_urls=ResourcesUtil.gekeyList(Config.ANONYMOUS_ACTIONS);
//Config.ANONYMOUS_ACTIONS就是资源的名字就是anonymousActions。说明要从这里去取值,

//得到用户的url
String url=request.getRequestURI();

//遍历资源文件里面是不是包含了我们要访问的那个url.如果包含了,放行。
for(String open_url:open_urls)
{

if(url.indexOf(open_url)>=0)//>=0说明找到位置了
{
return true; //返回true就是继续执行,
}

}

//如果上面的都没哟满足,那么我们就要拦截下来,跳转到用户的登录界面
request.getRequestDispatcher("/WEB-INF/jsp/base/login.jsp").forward(request, response);

return false;
}
/**
* 执行的时机:进入到Action方法,在返回modelAndView之前执行。
* 使用场景:在这里统一对返回的数据进行处理,比如统一添加菜单,导航等

*/
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {

}
/**
* 执行时间:action方法执行完成,已经返回modelAndview,执行
* 使用的场景:统一处理系统异常,在这里统一记录系统日志,监控action的执行的时间,在preHandle记录开始的时间,在afterCompletion记录结束的时间
*
*
*
*
*/
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {

}

}


打开springmvc.xml配置文件:

加入这么一段:

<mvc:interceptors>
<mvc:interceptor>

<mvc:mapping path="/**"/>
<bean class="yycg.base.action.HandlerInterceptor.LoginInterceptor"></bean>
</mvc:interceptor>

</mvc:interceptors>


这样拦截器就配置好了。

我们在url里面输入刚才的first.action之后:

发现:



说明成功了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: