@RestController public class LoginController { @Resource(name = "userServiceImpl") private IUserService userService; @RequestMapping(value = "/login/login", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public Result<User> login(HttpRequest request, HttpServletResponse response) { return userService.login(request, response); } @RequestMapping(value = "/login/check", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public Result<User> check(HttpServletRequest request, HttpServletResponse response) { Result<User> result = new Result<>(); String userId = SessionContext.get("user_id"); if (StringUtils.isEmpty(userId)) { Cookie loginTypeCookie = new Cookie("login_type", "0"); loginTypeCookie.setPath("/"); loginTypeCookie.setSecure(true); response.addCookie(loginTypeCookie); result.set("login_type", 0); } else { Cookie loginTypeCookie = new Cookie("login_type", "1"); loginTypeCookie.setPath("/"); loginTypeCookie.setSecure(true); response.addCookie(loginTypeCookie); result.set("login_type", 1); result.set("user_id", SessionContext.get("user_id")); result.set("user_name", SessionContext.get("user_name")); result.set("login_name", SessionContext.get("login_name")); result.set("user_image_id", SessionContext.get("user_image_id")); result.set("role_type", SessionContext.get("role_type")); // 检查token 是否需要更新 HttpSession session = request.getSession(false); if(session != null){ // 更新 session String issueAtStr = SessionContext.get("issueAt"); if(StringUtils.isNotEmpty(issueAtStr)){ Date issueAt = DateUtils.stringToDate(issueAtStr, DateConst.DATE_TIME_FORMAT_YYYY_MM_DD_HH_MI_SS_SSS); if(issueAt != null && TokenUtils.shouldTokenRefresh(issueAt)){ Map<String, Object> claims = new HashMap<>(10); claims.put("user_id", String.valueOf(SessionContext.getInt("user_id"))); claims.put("user_name", SessionContext.get("user_name")); claims.put("login_name", SessionContext.get("login_name")); claims.put("user_image_id", SessionContext.get("user_image_id")); claims.put("role_type", String.valueOf(SessionContext.getInt("role_type"))); String token = TokenUtils.createToken(claims); session.setAttribute("token", token); result.set("token", token); Cookie tokenCookie = new Cookie("token", token); tokenCookie.setPath("/"); response.addCookie(tokenCookie); } } } } return result; } @RequestMapping(value = "/login/exit", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public Result<User> exit(HttpRequest request) { HttpSession session = request.getSession(false); if (session != null) { session.invalidate(); } return new Result<>(); } }
时间: 2023-06-09 18:07:58 浏览: 105
){ // 计算过期时间,过期时间不足半小时 更新 token long expireTime = issueAt.getTime() + (30 * 60 * 1000); // 过期时间为发放时间+30分钟 if(System.currentTimeMillis() >= expireTime){ // 需要更新 token String token = JWTUtils.createToken(SessionContext.get("user_id")); session.setAttribute("token", token); result.set("token", token); } } } } } return result; } }
请问这段代码实现了什么功能?
相关问题
@RestController public class LoginController { @GetMapping("/login") public String login() { return " "; //返回登录页面的视图名称 } @PostMapping("/login") public String loginPost() { //处理登录逻辑 return "redirect:/"; //登录成功后重定向到首页 } }
这是一个使用Spring Boot框架编写的登录控制器,其中包含两个请求处理方法。第一个方法使用@GetMapping注解,处理GET请求,返回登录页面的视图名称。第二个方法使用@PostMapping注解,处理POST请求,处理登录逻辑并重定向到首页。该控制器可以通过访问"/login"路径来访问登录页面,通过提交表单数据来进行登录。
@RequiredArgsConstructor @Controller public class LoginController { private final LoginService loginService; @RequestMapping(value = "/login",method = RequestMethod.POST) //插入数据 public String login(String username, String password, String vercode, String role, HttpSession session, Model model) { return loginService.login(username,password,vercode,role,session,model); } @RequestMapping("/loginOut") public String loginOut(HttpSession session) { session.invalidate(); return "redirect:/"; } }请详细解释每一行代码
好的,我来逐行解释一下:
```java
@RequiredArgsConstructor
@Controller
public class LoginController {
private final LoginService loginService;
```
- `@RequiredArgsConstructor` 是 Lombok 提供的注解,用于自动生成构造函数,这里是为了注入 `LoginService`。
- `@Controller` 是 SpringMVC 中的注解,表示这是一个控制器。
```java
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String login(String username, String password, String vercode, String role, HttpSession session, Model model) {
return loginService.login(username,password,vercode,role,session,model);
}
```
- `@RequestMapping` 是 SpringMVC 中的注解,用于将 HTTP 请求映射到指定的方法上,`value` 表示请求路径,`method` 表示请求方法,这里是 POST 方法。
- `String login(String username, String password, String vercode, String role, HttpSession session, Model model)` 是处理登录请求的方法,它接收了用户名、密码、验证码、角色、会话和模型对象作为参数。
- `HttpSession` 是一个接口,用于表示客户端与服务器之间的会话。我们可以通过它来存储和获取会话数据。
- `Model` 是 SpringMVC 中的一个接口,用于在控制器和视图之间传递数据。它提供了一些方法,可以将数据存储在模型中,并将其发送到视图。
```java
@RequestMapping("/loginOut")
public String loginOut(HttpSession session) {
session.invalidate();
return "redirect:/";
}
```
- 这个方法是处理注销请求的,它接收一个 `HttpSession` 对象作为参数。
- `session.invalidate()` 方法会使当前会话失效,即删除会话中的所有数据。
- `return "redirect:/";` 表示重定向到根目录,即返回首页。
希望这些解释能够帮助你更好地理解这段代码!
阅读全文