首页 > 编程知识 正文

java assert使用场景,interface用法

时间:2023-05-05 03:04:20 阅读:149672 作者:2607

一、前文介绍了Interceptor和Filter的区别和执行顺序。 可以看出Filter依赖于servlet。 这主要是对URL地址进行编码、过滤无用参数和简单的安全检查(例如,可以登录也可以不登录),但Interceptor依赖于SpringMVC框架。 它具体介绍了在service或方法调用之前调用方法,或者在调用方法之后调用方法的Interceptor的使用方法和使用场景。

二、介绍1、Interceptor的使用: (1)、HandlerInterceptor界面的实现。 ) 2、继承实现了HandlerInterceptor接口的类。 例如,实现了Spring已经提供的HandlerInterceptor接口的抽象类HandlerInterceptorAdapter; 关于HandlerInterceptor界面在该界面中定义了三种方法,我们用这三种方法监听处理用户的请求。

(1)、http://www.Sina.com/(httpservletrequestrequest,HttpServletResponse response,Object handle ) )方法。 xqdbl,preHandleSpringMVC的解释器由链式调用,可以在一个APP应用程序或请求中同时存在多个解释器。 每个Interceptor的调用按声明顺序依次执行,最初执行的是Interceptor内的preHandle方法,因此该方法可以进行预初始化操作,可以对当前请求进行预处理,也可以使用该方法判断是否继续请求http://www.Sina.com/http://www.Sina.com /

) 2、http://www.Sina.com/(httpservletrequestrequest,HttpServletResponse response,Object handle, 从modelandviewmodelanse preHandle方法的说明中可以看出,此方法还包括后面要介绍的afterCompletion方法,并且当前所属的interceptor pre handle方法的返回值为trector **postHandle方法,xqdbl在处理当前请求后执行,即在调用Controller方法后执行,但在返回并呈现视图之前调用dispatcher servlet,因此此方法*postHandle方法在与preHandle相反的方向上调用。 这意味着,之前声明的interceptor posthandle方法将反向执行。

)3)、http://www.Sina.com/(httpservletrequestrequest,HttpServletResponse response,Object handle,Exception ex ) )方法

三、代码1、Interceptor的使用场景详细介绍了Interceptor的三种方法,让我们来看看Interceptor的使用场景。

) 1、登录拦截器//登录拦截器的publicclasslogininterceptorimplementshandlerinterceptor (/* *控制器运行前完成业务逻辑操作true表示继续,false为*/publicbooleanprehandle (httpservletrequestrequest,HttpServletResponse response,Object handler loginuser==null ) string path=session.getservletcontext ().getContextPath; 响应。

sendRedirect(path + "/login");return false;} else {return true;}}/** * 在Controller方法调用之后执行,但是它会在DispatcherServlet进行视图返回渲染之前被调用 */public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {// TODO Auto-generated method stub}/** * 在完成视图渲染之后,执行此方法。 */public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {}}

登陆拦截器在访问每个URL的时候都会进行是否登陆判断,如果没登陆的话,就直接跳转到登陆页,并不会跳转到要访问的路径(数据可能获取不到)。在登陆的控制器中,需要把用户信息放在session中,然后在登陆拦截器中,采用如下方式获取HttpSession session = request.getSession();

//登陆控制器,往session中存用户数据代码User dbUser = userService.queryForLogin(user);if ( dbUser != null ) {session.setAttribute("loginUser", dbUser);} (2)、日志拦截器 /** * 用于记录日志,在每次请求之前,打印请求的地址和参数,方便调试 */public class LogInterceptor implements HandlerInterceptor {/** 记录日志 */private static Logger logger = LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object arg2) throws Exception {StringBuilder sb = new StringBuilder();String uri = request.getRequestURI();sb.append("---------------> demo uri:").append(uri).append(" - ");Enumeration<String> enums2 = request.getParameterNames();while (enums2.hasMoreElements()) {String key = enums2.nextElement();sb.append(""").append(key).append("":").append(request.getParameter(key)).append(", ");}logger.info(sb.toString());return true;}@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object arg2, ModelAndView arg3)throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object arg2, Exception arg3) throws Exception {}} (3)、授权访问Url拦截器

此处需要说明一下,无论在门户网站还是管理平台,如果登陆系统后,你知道一些存在的url,即使你没有访问权限,但你在浏览器中直接输入正确的url,你依然可以访问页面,此拦截器的目的就是解决这个问题。

//此处采用继承抽象类的方式,不是实现Interceptor方式public class AuthInterceptor extends HandlerInterceptorAdapter {@Autowiredprivate PermissionService permissionService;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception {// 获取用户的请求地址String uri = request.getRequestURI();String path = request.getSession().getServletContext().getContextPath();// 判断当前路径是否需要进行权限验证。// 查询所有需要验证的路径集合List<Permission> permissions = permissionService.queryAll();Set<String> uriSet = new HashSet<String>();for ( Permission permission : permissions ) {if ( permission.getUrl() != null && !"".equals(permission.getUrl()) ) {uriSet.add(path + permission.getUrl());}}if ( uriSet.contains(uri) ) {// 权限验证// 判断当前用户是否拥有对应的权限Set<String> authUriSet = (Set<String>)request.getSession().getAttribute("authUriSet");if ( authUriSet.contains(uri) ) {return true;} else {response.sendRedirect(path + "/error");return false;}} else {return true;}}} (4)、在SpringMVC中注册这些拦截器 <mvc:interceptors>//对所有请求进行拦截,包括静态资源<mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.scorpios.atcrowdfunding.web.LogInterceptor"></bean></mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**" /> <mvc:exclude-mapping path="/login" /> <mvc:exclude-mapping path="/doAJAXLogin" /> <mvc:exclude-mapping path="/bootstrap/**" /> <mvc:exclude-mapping path="/css/**" /> <mvc:exclude-mapping path="/fonts/**" /> <mvc:exclude-mapping path="/img/**" /> <mvc:exclude-mapping path="/jquery/**" /> <mvc:exclude-mapping path="/layer/**" /> <mvc:exclude-mapping path="/script/**" /> <mvc:exclude-mapping path="/ztree/**" /> //该拦截器不对静态资源进行拦截 <bean class="com.scorpios.atcrowdfunding.web.LoginInterceptor"></bean> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**" /> <mvc:exclude-mapping path="/login" /> <mvc:exclude-mapping path="/doAJAXLogin" /> <mvc:exclude-mapping path="/bootstrap/**" /> <mvc:exclude-mapping path="/css/**" /> <mvc:exclude-mapping path="/fonts/**" /> <mvc:exclude-mapping path="/img/**" /> <mvc:exclude-mapping path="/jquery/**" /> <mvc:exclude-mapping path="/layer/**" /> <mvc:exclude-mapping path="/script/**" /> <mvc:exclude-mapping path="/ztree/**" /> //该拦截器不对静态资源进行拦截 <bean class="com.scorpios.atcrowdfunding.web.AuthInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>

以上就是拦截器Interceptor的使用和使用场景。

四、总结

(1)、在SpringMVC中利用mvc:interceptors标签,来声明一系列的拦截器,然后它们就可以形成一个拦截器链,拦截器的执行顺序是按声明的先后顺序执行的,先声明的拦截器中的preHandle方法会先执行,然而它的postHandle方法和afterCompletion方法却会后执行。

(2)、在mvc:interceptors标签下声明interceptor主要有两种方式:

a、直接定义一个Interceptor实现类的bean对象。使用这种方式声明的Interceptor拦截器将会对所有的请求进行拦截。b、使用mvc:interceptor标签进行声明。使用这种方式进行声明的Interceptor可以通过mvc:mapping子标签来定义需要进行拦截的请求路径。

经过上述两步之后,定义的拦截器就会发生作用对特定的请求进行拦截了。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。