任务
某些页面不想让外人访问时,就需要定义页面拦截器,来拦截非法访问。例如,在博客后台管理中,对于博客内容的编辑页面是不允许直接访问的,若任何人都可以进入内容编辑页面,后果不堪设想,此时,就需要拦截对博客内容编辑页面的直接访问,当访问博客内容编辑页面时,需要使用拦截器去判断在访问这些页面时是否已经登录,若没有登录,则先登录才能对博客内容进行编辑。
代码实现
1 创建登录拦截器类——LoginInterceptor
package com.hdq.blog_3.interceptor;
//非法访问博客管理页面拦截器
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//防止其它访客直接登录博客管理页面对我们的博客进行危害
//因此在访问这些页面时,要做一个页面拦截器,就是在访问这些页面的时候要首先判断管理员是否登录
public class LoginInterceptor implements HandlerInterceptor {
@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 定义拦截器所拦截的地址
package com.hdq.blog_3.interceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
//定义拦截器所拦截的地址,以及不拦截的地址
//@Configuration需要加上,SpringBoot才能够识别这一配置,才能进行拦截
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/admin/**")
.excludePathPatterns("/admin")
.excludePathPatterns("/admin/login");
}
}