携手创作,共同成长!这是我参与「掘金日新计划 · 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");
}
}
验证结果:
可以看到配置好拦截器后,我们只有登入后才能访问其他的页面,不能未登入进行页面访问!