Springboot怎么实现接口登录放行,实现免登录访问接口
时间: 2023-11-27 22:51:43 浏览: 111
Spring Boot可以通过拦截器(Interceptor)或者过滤器(Filter)来实现接口登录放行,实现免登录访问接口。
下面分别介绍两种实现方式:
1. 拦截器方式
首先创建一个拦截器类,用于拦截请求并判断用户是否已登录:
```java
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 判断用户是否已登录,如果已登录则放行
HttpSession session = request.getSession();
if (session.getAttribute("user") != null) {
return true;
}
// 用户未登录,拦截请求
response.sendRedirect("/login");
return false;
}
}
```
然后在Spring Boot配置文件中添加拦截器配置:
```java
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加拦截器,拦截所有请求,除了登录接口和静态资源
registry.addInterceptor(loginInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/login", "/static/**");
}
}
```
上述配置中,`addPathPatterns("/**")`表示所有请求都被拦截,`.excludePathPatterns("/login", "/static/**")`表示排除了登录接口和静态资源不被拦截。
2. 过滤器方式
创建一个过滤器类,用于拦截请求并判断用户是否已登录:
```java
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
// 判断用户是否已登录,如果已登录则放行
HttpSession session = req.getSession();
if (session.getAttribute("user") != null) {
chain.doFilter(request, response);
return;
}
// 用户未登录,重定向到登录页面
resp.sendRedirect("/login");
}
@Override
public void destroy() {
}
}
```
然后在Spring Boot配置文件中添加过滤器配置:
```java
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean<LoginFilter> loginFilterRegistration() {
FilterRegistrationBean<LoginFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new LoginFilter());
registration.addUrlPatterns("/*");
registration.setName("loginFilter");
registration.setOrder(1);
return registration;
}
}
```
上述配置中,`registration.setFilter(new LoginFilter())`表示使用`LoginFilter`过滤器,`registration.addUrlPatterns("/*")`表示拦截所有请求,`registration.setOrder(1)`表示该过滤器的执行顺序为第一位。
阅读全文