项目---springboot登录拦截器

 原因:若是记住首页地址,可以不输入用户名和密码直接输入url进入,不符合业务逻辑,不安全,所以设置拦截器,

拦截器效果:非登录用户,只能访问登录页面,其他页面都不可以访问

1. 登录的控制层中,若登录成功,将用户存入session

package com.cc.springboot.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.thymeleaf.util.StringUtils;

import javax.servlet.http.HttpSession;
import java.util.Map;

@Controller
public class LoginController {

    @PostMapping("/login")
    public String login(HttpSession session, String username, String password, Map<String,Object>map){
//        判断用户名不为空,且密码为123
          if(!StringUtils.isEmpty(username) && "123".equals(password)){
              //登录成功
              //重定向 redirect: 可以重定向到任何一个请求中(包括其他项目),地址栏改变
//              return "main/index"; //在静态资源中查找文件
              session.setAttribute("loginUser",username);
              return "redirect:/main.html";
          }

//          登陆失败
           map.put("msg","用户名或密码错误");
          return "main/login";
    }
}

2.定义拦截器

package com.cc.springboot.Interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//登录拦截器
public class LoginHandlerInterceptor implements HandlerInterceptor {
//    调用目标方法之前被拦截
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        Object loginUser = request.getSession().getAttribute("loginUser");
        if(loginUser!=null){
//            已经登陆过,放行
            return true;
        }
//        没有登陆过,拦截,返回登录页
        request.setAttribute("msg","没有权限,请先登录");
        request.getRequestDispatcher("/index.html").forward(request,response);
        return false;
    }
}

 Ctrl+O使用接口的方法  Ctrl+Alt+v返回值

页面跳转不适用重定向,因为重定向的话,信息带不过去

3.在config中使用拦截器

package com.cc.springboot.config;

import com.cc.springboot.Interceptor.LoginHandlerInterceptor;
import com.cc.springboot.component.MyLocaleResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MySpringMvcConfigurer {
    @Bean
//    跳转首页
    public WebMvcConfigurer webMvcConfigurer() {
      return   new WebMvcConfigurer() {
//          添加视图控制
            @Override
            public void addViewControllers(ViewControllerRegistry registry) {
                registry.addViewController("/").setViewName("main/login");
                registry.addViewController("/index.html").setViewName("main/login");
                registry.addViewController("/main.html").setViewName("main/index");
            }

//            拦截器

          @Override
          public void addInterceptors(InterceptorRegistry registry) {
              registry.addInterceptor(new LoginHandlerInterceptor())
//              指定要拦截的请求  /**表示拦截所有请求
                      .addPathPatterns("/**")
//                      排除不需要拦截的路径
                      .excludePathPatterns("/","/index.html","/login")
//                      springboot2+之后需要将静态资源文件的访问路径排除,/表示当前文件夹
                      .excludePathPatterns("/css/*","/img/*","/js/*");
          }
      };
    }
    @Bean
//    切换语言  自己定义的区域解析器
    public LocaleResolver localeResolver(){
        return new MyLocaleResolver();
    }
}

测试-》输入登陆有的页面,查看是否可以登录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值