LoginController.java 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package com.yaozhitech.spring5.controller;
  2. import javax.servlet.http.HttpServletResponse;
  3. import org.apache.shiro.SecurityUtils;
  4. import org.apache.shiro.authc.AuthenticationException;
  5. import org.apache.shiro.authc.UsernamePasswordToken;
  6. import org.apache.shiro.subject.Subject;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.http.HttpStatus;
  9. import org.springframework.http.ResponseEntity;
  10. import org.springframework.web.bind.annotation.GetMapping;
  11. import org.springframework.web.bind.annotation.PostMapping;
  12. import org.springframework.web.bind.annotation.RequestBody;
  13. import org.springframework.web.bind.annotation.RestController;
  14. import com.yaozhitech.spring5.dto.UserDto;
  15. import com.yaozhitech.spring5.service.UserService;
  16. import lombok.extern.slf4j.Slf4j;
  17. import reactor.core.publisher.Mono;
  18. @Slf4j
  19. @RestController
  20. public class LoginController {
  21. @Autowired
  22. private UserService userService;
  23. /**
  24. * 用户名密码登录
  25. *
  26. * @param request
  27. * @return token
  28. */
  29. @PostMapping(value = "/login")
  30. public ResponseEntity<Mono<UserDto>> login(@RequestBody UserDto loginInfo, HttpServletResponse response) {
  31. Subject subject = SecurityUtils.getSubject();
  32. try {
  33. UsernamePasswordToken token = new UsernamePasswordToken(loginInfo.getUsername(), loginInfo.getPassword());
  34. subject.login(token);
  35. UserDto user = (UserDto) subject.getPrincipal();
  36. Mono<UserDto> userMono = Mono.just(user).map(u -> {return userService.generateJwtToken(user.getUsername());})
  37. .doOnNext(u -> {response.setHeader("x-auth-token", u);})
  38. .map(u -> {return userService.getJwtTokenInfo(loginInfo.getUsername());});
  39. return ResponseEntity.ok(userMono);
  40. } catch (AuthenticationException e) {
  41. log.error("User {} login fail, Reason:{}", loginInfo.getUsername(), e.getMessage());
  42. return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build();
  43. } catch (Exception e) {
  44. return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
  45. }
  46. }
  47. /**
  48. * 退出登录
  49. *
  50. * @return
  51. */
  52. @GetMapping(value = "/logout")
  53. public Mono<String> logout() {
  54. Subject subject = SecurityUtils.getSubject();
  55. if (subject.getPrincipals() != null) {
  56. }
  57. SecurityUtils.getSubject().logout();
  58. return Mono.empty();
  59. }
  60. }