基于SpringBoot的online_music_player(配置拦截器)

91 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情 

配置拦截器

有些页面我们没有登入也可以进行访问,通过输入url到地址栏即可!

我们可以在项目中进行登入状态的检查,如果登入了就可以访问,否则不能,这就配置了拦截器,保证程序安全!

  • 我们首先在config包下自定义一个拦截器

核心代码

package com.example.onlinemusic.config;
​
import com.example.onlinemusic.model.Contant;
import com.example.onlinemusic.tools.ResponseBodyMessage;
import org.springframework.web.servlet.HandlerInterceptor;
​
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
​
/**
 * Created with IntelliJ IDEA.
 * Description:配置拦截器
 * User: hold on
 * Date: 2022-08-06
 * Time: 0:43
 */
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //检查是否登入!
        HttpSession session = request.getSession(false);
        if(session==null||session.getAttribute(Contant.USERINFO_SESSION_KEY)==null){
            //未登入状态!
            System.out.println("未登入");
            return false;
        }
        return true;
    }
}
​
  • 然后将配置好的拦截器添加到AppConfig类中
package com.example.onlinemusic.config;
​
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
​
/**
 * Created with IntelliJ IDEA.
 * Description:将自定义拦截器添加到系统配置!
 * User: hold on
 * Date: 2022-07-27
 * Time: 12:29
 */
@Configuration
public class AppConfig implements WebMvcConfigurer {
    //将BCrypetPasswordEncoder对象交给spring管理!
    @Bean
    public BCryptPasswordEncoder getBCryptPasswordEncoder(){
        return new BCryptPasswordEncoder();
    }
​
    //添加拦截器!
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        LoginInterceptor loginInterceptor = new LoginInterceptor();
        registry.addInterceptor(loginInterceptor)
                //拦截该项目目录下的所有文件!
                .addPathPatterns("/**")
                //排除无关文件
                .excludePathPatterns("/js/**.js")
                .excludePathPatterns("/images/**")
                .excludePathPatterns("/css/**.css")
                .excludePathPatterns("/fronts/**")
                .excludePathPatterns("/player/**")
                //排除登入注册接口!
                .excludePathPatterns("/login.html")
                .excludePathPatterns("/user/login")
                .excludePathPatterns("/reg.html")
                .excludePathPatterns("/user/register");
    }
}
​

验证结果:

image-20220806011222276

image-20220806011857589 可以看到配置好拦截器后,我们只有登入后才能访问其他的页面,不能未登入进行页面访问!