一.ssm框架中使用拦截器的实例1
新建一个过滤器LoginInterceptor ,根据解决思路中
哪些页面需要登录?哪些页面不需要呢?
a. 不需要登录也可以访问的
如:注册,登录,产品,首页,分类,查询等等
b. 需要登录才能够访问的
如:购买行为,加入购物车行为,查看购物车,查看我的订单等等
不需要登录也可以访问的已经确定了,但是需要登录才能够访问,截止目前为止还不能确定,所以这个过滤器就判断如果不是注册,登录,产品这些,就进行登录校验
1. 准备字符串数组 noNeedAuthPage,存放哪些不需要登录也能访问的路径
2. 获取uri
3. 去掉前缀/tmall_ssm
4. 如果访问的地址是/fore开头
4.1 取出fore后面的字符串,比如是forecart,那么就取出cart
4.2 判断cart是否是在noNeedAuthPage
4.2 如果不在,那么就需要进行是否登录验证
4.3 从session中取出"user"对象
4.4 如果对象不存在,就客户端跳转到login.jsp
4.5 否则就正常执行
public
class
LoginInterceptor
extends
HandlerInterceptorAdapter {
@Autowired
CategoryService categoryService;
@Autowired
OrderItemService orderItemService;
/**
* 在业务处理器处理请求之前被调用
* 如果返回false
* 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
* 如果返回true
* 执行下一个拦截器,直到所有的拦截器都执行完毕
* 再执行被拦截的Controller
* 然后进入拦截器链,
* 从最后一个拦截器往回执行所有的postHandle()
* 接着再从最后一个拦截器往回执行所有的afterCompletion()
*/
public
boolean
preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws
Exception {
HttpSession session = request.getSession();
String contextPath=session.getServletContext().getContextPath();
String[] noNeedAuthPage =
new
String[]{
"home"
,
"checkLogin"
,
"register"
,
"loginAjax"
,
"login"
,
"product"
,
"category"
,
"search"
};
String uri = request.getRequestURI();
uri = StringUtils.remove(uri, contextPath);
// System.out.println(uri);
if
(uri.startsWith(
"/fore"
)){
String method = StringUtils.substringAfterLast(uri,
"/fore"
);
if
(!Arrays.asList(noNeedAuthPage).contains(method)){
User user =(User) session.getAttribute(
"user"
);
if
(
null
==user){
response.sendRedirect(
"loginPage"
);
return
false
;
}
}
}
return
true
;
}
在xml文件中再注册一下:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path=
"/fore*"
/>
<bean
class
=
"com.how2java.tmall.interceptor.LoginInterceptor"
/>
</mvc:interceptor>
</mvc:interceptors>
二.ssm框架中使用拦截器的实例2
1.
public class LoginInterceptor extends HandlerInterceptorAdapter {
//可以使用alt+insert进行类的重写
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
if (request.getSession().getAttribute("user") == null) {
response.sendRedirect("/admin");
return false;
}
return true;
}
}
//我们使用这个类说明我们需要对哪些地方进行拦截
2.
@Configuration//标注这是一个配置类
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/admin/**")//表示/admin/**这个形式的url下的访问都会被进行限制
.excludePathPatterns("/admin")//表示除了哪些路径不被限制
.excludePathPatterns("/admin/login");
}
}
//这个类就是使用了上面的那个类进行一些操作