Spring Boot实现登录拦截

目录

一 相关配置

二 控制器

三 视图

四 码云地址


一 相关配置

1 登录拦截器

package com.ckf.springbootinterceptor.config;


import org.springframework.web.servlet.HandlerInterceptor;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;


/**
* @className: LoginInterceptor
* @description: 登录拦截器
* @date: 2020/6/16
* @author: cakin
*/
public class LoginInterceptor implements HandlerInterceptor {




    /**
     * 用于存储排除拦截的url  (登录/login.html, /css,/js,/img)
     */
    private List<String> urls = new ArrayList<>();


    /**
     * 功能描述:进入控制器之前拦截
     *
     * @param request  请求
     * @param response 响应
     * @param handler  处理
     * @return boolean 是否放行
     * @author cakin
     * @date 2020/6/16
     */
    @Override
    public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler ) throws Exception {
        HttpSession session = request.getSession();
        if (session.getAttribute("username") != null) {
            // 已登录,放行。。
            return true;
        } else {
            System.out.println("你还没登录,没有权限");
            // 未登录,拦截 返回login
            response.sendRedirect("/login");
            return false;
        }
    }




    /**
     * 功能描述:设置能通过的url
     *
     * @return List<String>
     * @author cakin
     * @date 2020/6/16
     */
    public List<String> getUrls() {
        urls.add("/login");    // login url请求
        urls.add("/doLogin");  // 登录请求
        urls.add("/no_login");
        urls.add("/swagger-ui.html");


        // 静态资源
        urls.add("/img/*");
        urls.add("/js/*");
        urls.add("/css/*");
        return urls;
    }
}

2 Swagger配置

package com.ckf.springbootinterceptor.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;




/**
* @className: SwaggerConfig
* @description: Swagger的配置
* @date: 2020/6/16
* @author: cakin
*/
@Configuration
@EnableSwagger2 // 开启swagger
public class SwaggerConfig {
    /**
     * 配置Swagger信息
     * http://localhost:8080/swagger-ui.html  请求路径
     * 扫描控制器的包
     *
     * @return Docket
     */
    @Bean
    public Docket createDocketApi() {
        return new Docket(DocumentationType.SWAGGER_2).pathMapping("/").select().apis(RequestHandlerSelectors.basePackage("com.ckf"))
                .paths(PathSelectors.any())
                .build().apiInfo(new ApiInfoBuilder()
                        .title("拦截系统项目 API 文档")
                        .description("演示SpringBoot整合Swagger...")
                        .version("2.2.3")
                        .contact(new Contact("cakin", "https://blog.csdn.net/chengqiuming", "798103175@qq.com"))
                        .license("The Apache License")
                        .licenseUrl("https://blog.csdn.net/chengqiuming")
                        .build());
    }
}

3 MVC配置

package com.ckf.springbootinterceptor.config;


import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


/**
* @className: WebappAdrapter
* @description: 注册拦截器配置类
* @date: 2020/6/16
* @author: cakin
*/
@Configuration
public class WebappAdapter implements WebMvcConfigurer {
    /**
     * @className: WebappAdapter
     * @description: 将登录拦截器添加进来
     * addPathPatterns()添加拦截
     * excludePathPatterns()排除拦截
     * @date: 2020/6/16
     * @author: cakin
     */
    @Override
    public void addInterceptors( InterceptorRegistry registry ) {
        // 实例化登录拦截器,用于注册
        LoginInterceptor loginInterceptor = new LoginInterceptor();


        /***
         * 所有路径都被拦截  addPathPatterns("/**")
         * 允许通过   excludePathPatterns("/login", "/register")等等
         */
        registry.addInterceptor(loginInterceptor).addPathPatterns("/**")
                .excludePathPatterns("/swagger-resources/**")
                .excludePathPatterns(loginInterceptor.getUrls());
        WebMvcConfigurer.super.addInterceptors(registry);
    }
}

二 控制器

package com.ckf.springbootinterceptor.controller;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;


import javax.servlet.http.HttpSession;


/**
* @className: LoginController
* @description: 登录控制器
* @date: 2020/6/16
* @author: cakin
*/
@Controller
public class LoginController {
    /**
     * 功能描述:用户登录
     *
     * @param userName 用户名
     * @param password 密码
     * @param session  session
     * @return String 登录页
     * @author cakin
     * @date 2020/6/16
     */
    @PostMapping("/doLogin")
    public String login( String userName, String password, HttpSession session ) {
        if (userName.equals("admin") && password.equals("123456")) {
            session.setAttribute("username", userName);
            //登录成功返回index 否则返回登录
            return "index";
        }
        return "login";
    }


    /**
     * 功能描述:显示登录页
     *
     * @author cakin
     * @date 2020/6/16
     * @return String 登录页
     */
    @GetMapping("/login")
    public String loginView() {
        return "login";
    }


    /**
     * 功能描述:显示非法登录页
     *
     * @author cakin
     * @date 2020/6/16
     * @return String 非法页面
     */
    @GetMapping("/no_login")
    public String noLogin() {
        return "no_login";
    }


    /**
     * 功能描述:显示订单页
     *
     * @author cakin
     * @date 2020/6/16
     * @return String 订单页
     */
    @GetMapping("/orders")
    public String orders() {
        return "orders";
    }


    /**
     * 功能描述:显示用户页
     *
     * @author cakin
     * @date 2020/6/16
     * @return String 用户页
     */
    @GetMapping("/user")
    public String user() {
        return "user";
    }
}

三 视图

1 index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    测试1
</body>
</html>

2 login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
<form action="/doLogin" method="post">
    用户名:<input type="text" name="userName"/>
    密码:<input type="password" name="password"/>
    <input type="submit" value="登录">
</form>
</body>
</html>

3 no_login.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<span th:text="${session.username}"></span>用户还没登录,没有权限访问!!
<p>
    <a href="/login">返回登录</a>
</p>
</body>
</html>

4 orders.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>订单页面</title>
</head>
<body>
<h1>欢迎来到订单系统</h1>
</body>
</html>

5 user.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>欢迎来到用户管理</h1>
</body>
</html>

四 码云地址

https://gitee.com/cakin24/springboot-interceptor

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值