springboot 拦截器

alt+回车:idea的代码提示

测试时应该禁用模板引擎缓存

禁用模板引擎的缓存
spring.thymeleaf.cache=false
页面修改完成以后 ctrl+f9 :重新编译;
thymeleaf语法th:if="${}"做if判断。优先级高于th:text="${}", #strings.isEmpty(msg) #在这里是引用对象这句话的意思是引用strings对象的isEmpty()方法
 
<button type="submit">登录</button><p style="color: red;" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}">1</p>

一个简单的登录验证

   @PostMapping("/checklogin")
    public String checklogin(@RequestParam String username, @RequestParam String password, Map<String,Object> map, HttpSession session){
        if (!StringUtils.isEmpty(username) && "123456".equals(password)){
            map.put("users",new String[]{"lily","lucy"});
            //为了做登录验证
            session.setAttribute("username",username);
           // return "success";
            //登录页面后防止页面刷新造成的表单重复提交可以使用重定向
                //要提前增添一个视图映射
            //重定向的页面获取不到绑定的值
            //做了重定向之后需要做登录检查,要不然谁都可以不经过登录直接访问
            return "redirect:/main.html";
        }
        map.put("msg","密码错误");
        return "login";
    }

写拦截器,拦截器都实现HandlerInterceptor接口

//写完拦截器之后还要注册拦截器
public class LoginHandlerInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //检查session中是否存在登录用户
        Object user=request.getSession().getAttribute("username");
        if (user==null){
            //未登录则转发到登录页面
            request.setAttribute("msg","没有权限先登录");
            request.getRequestDispatcher("/login").forward(request,response);
            return false;
        }else{
            //已登录,放行
            return true;
        }
    }

 

为"redirect:/main.html";添加映射,注册LoginHandlerInterceptor拦截器

拦截器也会拦截静态资源,所以也要排除静态资源

public class MyMvcConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //拦截/yang请求到success,但是无法使用success中的数据
        registry.addViewController("/yang").setViewName("success");

//为"redirect:/main.html";添加映射
        registry.addViewController("/main.html").setViewName("success");
    }

    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocalResolver();
    }

   //因为要设置拦截请求所以使用注册的方式
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
       registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/login","/checklogin","/webjars/**","/asserts/**");


    }
}

springMVC中配置拦截器

 先写intercept

public class MyInterceptor implements HandlerInterceptor {
    private final static Logger logger = LoggerFactory.getLogger(MyInterceptor.class);
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        logger.info("进入 preHandle 方法..." + request.getRequestURL().toString() + "," + request.getRequestURI());
        return true;
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        logger.info("进入 postHandle 方法..." + request.getRequestURL().toString() + "," + request.getRequestURI());
    }
 
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        logger.info("进入 afterCompletion 方法..." + request.getRequestURL().toString() + "," + request.getRequestURI());
    }
}

再把intercept注册进interceptors容器中

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/user/index"/>
            <bean class="com.springmvc.intercepter.MyInterceptor"/>
        </mvc:interceptor>
</mvc:interceptors>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值