SSM项⽬中使⽤和过滤器的实现⽰例
⼀、概述
Spring MVC 也可以使⽤对请求进⾏拦截处理,⽤户可以⾃定义来实现特定的功能,⾃定义的必须实现 HandlerInterceptor 接⼝preHandle():这个⽅法在业务处理器处理请求之前被调⽤,在该⽅法中对⽤户请求 request 进⾏处理。如果程序员决定该对请求进⾏拦截处理后还要调⽤其他的,或者是业务处理器去进⾏处理,则返回 true;如果程序员决定不需要再调⽤其他的组件去处理请求,则返回 false。
postHandle():这个⽅法在业务处理器处理完请求后,但是 DispatcherServlet向客户端返回响应前被调⽤,在该⽅法中对⽤户请求 request 进⾏处理。
afterCompletion():这个⽅法在 DispatcherServlet 完全处理完请求后被调⽤,可以在该⽅法中进⾏⼀些资源清理的操作。
⼆、配置步骤
1、创建⼀个(实现HandlerInterceptor接⼝)
package com.ssm.Interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//获取请求的URL
String RequestURI();
HttpSession Session();
Object Session().getAttribute("USERINFO");
System.out.println("链接:"+requestURI+"进⼊");
if(userInfo==null){ //表⽰未登录就想进⼊系统
//直接重定向到登录界⾯
String Scheme()+"://"+ServerName()+":"+ServerPort()+ContextPath()+"/index.jsp";
response.sendRedirect(serverPath);
return false;
}else{
//登陆成功,不拦截
return true;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("跳转后拦截");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("渲染后拦截");
}
}
这个我只是写个Demo,所以只进⾏了是否登录的验证,真正的项⽬中你也可以在这⾥进⾏⼀些权限的判断等等。
2、配置
<!--配置-->
<mvc:interceptors>
<!--后台访问-->
<mvc:interceptor>
<!--拦截所有资源-->
<mvc:mapping path="/**"/>
<!--登陆不拦截-->
<mvc:exclude-mapping path="/user/login"/>
<!--邮箱激活不拦截-->
<mvc:exclude-mapping path="/user/activeEmail"/>
<!--静态资源的⽬录不拦截-->
<mvc:exclude-mapping path="/commons/**"/>
<!--⽤户通过邮箱中重置密码的链接不拦截-->
<mvc:exclude-mapping path="/email/resetPassword"/>
<!--激活邮箱的验证不拦截-->
<mvc:exclude-mapping path="/user/validateCode"/>
<!--实现拦截功能的类-->
<bean class="com.ssm.Interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
由于配置了<mvc:mapping path="/**"/>会拦截所有资源,我们必须⽤<mvc:exclude-mapping path="/这⾥写你想放⾏的请求">标签放⾏静态资源和⼀些不⽤拦截的请求(登录等等)。<bean
class="com.ssm.Interceptor.LoginInterceptor"></bean>是第⼀步创建的。
3、测试下:
在地址栏输⼊个⾮法的请求试试:
通过地址栏可以看到,页⾯已经被重定向到了登陆界⾯,拦截成功。
但是并不能拦截jsp页⾯的访问,这个时候两种选择:
1、将所有jsp页⾯都放在WEB-INF⽬录下
2、⽤Servlet过滤器(虽然感觉技术有点⽼了)
三、过滤器概述
Servlet过滤器主要⽤于对客户端(浏览器)的请求进⾏过滤处理,然后将过滤后的请求转交给下⼀资源。
四、过滤器配置步骤
1、创建⼀个过滤器(实现Filter接⼝)
package com.ssm.Filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
//⾃定义过滤器
public class LoginFilter implements Filter {
//初始化⽅法
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//初始化处理
System.out.println("过滤器初始化");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//过滤处理
//servletRequest 是个接⼝,HttpServletRequest 是实现,但是有些⽅法是HttpServletRequest独有的,如:getSession
//HttpServletRequest接⼝是继承servletRequest接⼝,增加了和http相关的⽅法
HttpServletRequest request= (HttpServletRequest) servletRequest;
HttpServletResponse response= (HttpServletResponse) servletResponse;
// String RequestURI();
// System.out.println("链接:"+requestURI+"进⼊过滤器");
HttpSession Session();
Attribute("USERINFO")==null){
//⾮法请求,直接跳转到登陆界⾯
String Scheme()+"://"+ServerName()+":"+ServerPort()+ContextPath()+"/index.jsp";
response.sendRedirect(serverPath);
}else{
//正常登录,放⾏
filterChain.doFilter(request,response);
}
}
@Override
public void destroy() {
//释放资源
System.out.println("过滤器销毁");
}
}
2、配置l
<!--使⽤过滤器实现登陆控制-->
<!--filter标签⽤于声明过滤器对象-->
<filter>
<!--过滤器名称-->
<filter-name>LoginFilter</filter-name>
<!--过滤器完整类名-->
<filter-class>com.ssm.Filter.LoginFilter</filter-class>
</filter>
<!--filter-mapping⽤于创建过滤器的映射,指定Web应⽤中,哪些URL应⽤哪⼀个过滤器进⾏处理-->
<filter-mapping>
<filter-name>LoginFilter</filter-name>ssm框架实现登录功能
<!--url-pattern⽤于指定过滤器应⽤的URL-->
<!--过滤的页⾯(⾃定义),这⾥对登录界⾯就不要过滤了-->
<url-pattern>/views/*</url-pattern>
</filter-mapping>
各个标签的解释都写在注释⾥⾯了,⾄于需要过滤的资源,你可以根据⾃⼰的需求再添加<url-pattern>,我主要是想把views⽬录下⾯的jsp全部过滤。
3、测试过滤器
不登陆直接访问后台jsp页⾯:
访问之后:
可以看到,过滤器直接将请求重定向到了登陆界⾯,过滤器过滤成功。
五、总结
现在已经有了很多权限管理的框架了,Shiro、Spring Security等等,以后尽量还是⽤新技术。
到此这篇关于SSM项⽬中使⽤和过滤器的⽂章就介绍到这了,更多相关SSM项⽬中使⽤和过滤器内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论