import org.springframework.context.annotation.Bean;
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;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@Configuration //等同于spring的XML配置文件
public class WebSecurityConfig implements WebMvcConfigurer {
/**
* 登录session key
*/
public final static String SESSION_KEY = "user";
@Bean
public SecurityInterceptor getSecurityInterceptor(){
return new SecurityInterceptor();
}
@Override
public void addInterceptors (InterceptorRegistry registry){
InterceptorRegistration addInterceptor = registry.addInterceptor(getSecurityInterceptor());
/* 配置不需要拦截的路由 */
addInterceptor.excludePathPatterns("/login");
/* 配置需要拦截的路由 */
addInterceptor.addPathPatterns("/**");
}
private class SecurityInterceptor extends HandlerInterceptorAdapter{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception{
/* 获取session */
HttpSession session = request.getSession();
/* 可自定义判断 */
if(session.getAttribute(SESSION_KEY) != null){
/* 有session值,则继续下一步操作 */
return true;
}
/*如果没有session值,则返回 401 的错误信息 */
response.setStatus(401);
return false;
}
}
}
登录
UserController
@ResponseBody
@PostMapping("/login")
public Map<String, Object> loginPost(String account, String password, HttpSession session) {
Map<String, Object> map = new HashMap<>();
/* 使用JPA自定义查询,详情可见 https://blog.csdn.net/weixin_45703665/article/details/103351737 */
User user = userDao.findByTelAndPassword(account, password);
/* 如果用户不存在,则返回登录失败信息 */
if (user == null) {
map.put("success", false);
map.put("message", "密码错误");
return map;
}
/* 如果用户存在,则保存session */
session.setAttribute(WebSecurityConfig.SESSION_KEY, account);
/* 登录成功,返回成功信息和用户数据 */
map.put("success", true);
map.put("message", "登录成功");
map.put("user", user);
return map;
}
查看
@ResponseBody /* 表示该方法的返回结果直接写入HTTP response body中,直接返回json数据 */
@GetMapping("/index")
public String index(@SessionAttribute(WebSecurityConfig.SESSION_KEY) String account, Model model) {
model.addAttribute("name", account);
return "index";
}
退出
@ResponseBody
@GetMapping("logout")
public String logout(HttpSession session) {
/* 删除 session 值 */
session.removeAttribute(WebSecurityConfig.SESSION_KEY);
return "logout success";
}