Spring Boot教程
SpringBoot使用拦截器实现登录功能
1、拦截器配置
拦截器类
package com.example.common; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException { String token = (String) request.getSession().getAttribute("TOKEN"); if (token != null && !token.isEmpty()) { return true; } else { request.getRequestDispatcher("/login.html").forward(request, response); return false; } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { } }
拦截器配置
package com.example.common; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class LoginConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { InterceptorRegistration registration = registry.addInterceptor(new LoginInterceptor()); registration.addPathPatterns("/**") .excludePathPatterns( "/**/*.html", "/**/*.js", "/**/*.css", "/user/login" ) .excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**", "/csrf"); } }
2、控制器类
package com.example.boot; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @RestController @RequestMapping("/user") @Api("用户API") public class UserController { @Autowired UserMapper userMapper; @PostMapping(value = "/login") @ApiOperation(value = "用户登录", notes = "用户登录", httpMethod = "POST") @ApiImplicitParams( { @ApiImplicitParam(name = "username", value = "Username", paramType = "query", required = true, dataType = "String"), @ApiImplicitParam(name = "password", value = "Password", paramType = "query", required = true, dataType = "String") } ) public String login(HttpServletRequest request, HttpServletResponse response, Person person) throws ServletException, IOException { if (person != null && person.getUsername() != null && person.getPassword() != null) { request.getSession().setAttribute("TOKEN", person.getUsername()); return "login success: " + person.getUsername(); } else { request.getRequestDispatcher("/index.html").forward(request, response); return null; } } @RequestMapping(value = "/get/{id}", method = RequestMethod.GET) @ApiOperation(value = "根据id查询用户", notes = "查询单个用户") @ApiImplicitParam(name = "id", value = "UserId", paramType = "path", required = true, defaultValue = "1", dataTypeClass = Integer.class) public User getUser(@PathVariable("id") Integer id) { User user = userMapper.getUser(id); return user; } }