SpringBoot+Vue+Redis 단일 로그 인 실현(한 곳 은 로그 인 하고 다른 곳 은 로그 인 종료)
8151 단어 springbootvueredis단일 로그 인
사용자 가 브 라 우 저 에 로그 인 한 후 다른 페이지 로 이동 하 는 것 을 실현 합 니 다.사용자 가 다른 곳 에서 다시 로그 인 할 때 앞 에 사용자 가 로그 인 한 페이지 는 로그 인 을 종료 합 니 다(qq 번호 와 같은 방식)
2.사고 방향 실현
사용자 가 전단 에 사용자 정 보 를 입력 하고 로그 인 한 후에 배경 에서 데 이 터 를 받 으 면 데이터 베 이 스 를 먼저 판단 합 니 다.로그 인 에 성공 하면 map 집합 을 만 들 고 사용자 id 를 키 로 하고 token 을 값 으로 합 니 다.먼저 현재 로그 인 사용자 의 id 를 통 해 token 을 가 져 옵 니 다.token 이 존재 하면 이 사용자 가 로그 인 했다 는 것 을 설명 하고 redis 를 호출 하여 token 을 키 로 이전 사용자 의 정 보 를 삭제 하고 호출 방법 으로 새로운 token 을 생 성 합 니 다.또한 token 을 map 집합 에 저장 하고 사용자 정 보 를 redis 에 저장 하 며 token 을 쿠키 에 저장 합 니 다.사용자 가 앞에서 로그 인 한 페이지 로 돌아 갈 때 페이지 를 새로 고치 고 호출 방법 을 사용 합 니 다.백 엔 드 를 통 해 쿠키 의 token 값 을 얻 고 token 을 통 해 redis 에서 사용자 정보 가 존재 하 는 지 확인 합 니 다.존재 하지 않 으 면 전단 은 반환 값 을 통 해 로그 인 페이지 로 다시 돌아 갑 니 다!
3.실현 코드
백 엔 드:
1.SpringBoot 프로젝트 를 만 들 고 User 표를 만 듭 니 다.Vue 를 통 해 작 성 된 것 이기 때문에 앞 뒤 가 분리 되 고 도 메 인 을 넘 어야 합 니 다.저 는 도 메 인 설정 류,그리고 redis 의 util 류 를 작 성 했 습 니 다.되 돌아 오 는 패 키 징 류,쿠키 의 util 류,마지막 에 소스 코드 가 제공 되 어 스스로 추출 할 수 있 습 니 다.
2.yum 프로필
spring:
redis:
database: 0 #redis 0
host: 127.0.0.1 # redis ip
port: 6379 # redis
password: # redis
jedis:
pool:
max-total: 200 # redis
max-active: 100 # redis
max-idle: 8 #
min-idle: 5 #
datasource:
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
jpa:
show-sql: true
server:
port: 8888
REDIS_KEY : USER_TOKEN
3.실체 User.class 작성
@Data
@Entity
@Table(name = "user")
public class User {
@Id
@Column(name = "id",unique = true,nullable = false)
private int id;
@Column(name = "username",nullable = false)
private String username;
@Column(name = "password",nullable = false)
private String password;
}
4,작성 Dao,UserDao.class
public interface UserDao extends JpaRepository<User,Integer> {
public User findByUsernameAndPassword(String username, String password);
}
5.serviceImpl,UserServiceImpl.class 를 작성 하여 로그 인 한 업무 논리 처리
@Service
public class UserServiceImpl{
@Autowired
private UserDao userDao;
@Autowired
private JedisDao jedisDao;
@Value("${REDIS_KEY}") //
private String KEY;
private Map<Integer,String> UserLogin = new HashMap<>();
/**
*
* @param request
* @param response
* @param u
* @return
*/
public User userlogin(HttpServletRequest request, HttpServletResponse response, User u){
//
User user=userDao.findByUsernameAndPassword(u.getUsername(),u.getPassword());
// us
if(user==null){
return null;
}
// token
String token="user_"+ UUID.randomUUID().toString();
// map redis key
String oldToken = UserLogin.get(user.getId());
// map id
if(!StringUtils.isEmpty(oldToken)){
// redis
jedisDao.delValue(oldToken);
}
// key map
UserLogin.put(user.getId(),token);
// redis
jedisDao.setValue(token, JsonUtils.objectToJson(user));
// token cookie
CookieUtils.setCookie(request,response,KEY,token,5*60,true);
return user;
}
/**
*
* @param response
* @param request
* @return
*/
public String getUserByToken(HttpServletResponse response, HttpServletRequest request) {
// cookie token
String token=CookieUtils.getCookieValue(request,KEY);
// redis
String user= jedisDao.getValue(token);
return user;
}
}
6.controller 를 작성 하여 전단 요청 을 받 고 데 이 터 를 되 돌려 줍 니 다.
@RestController
public class LoginController {
@Autowired
private UserServiceImpl userService;
/**
*
* @param response
* @param request
* @param user
* @param model
* @return
*/
@PostMapping("/login")
public ResponseResult Login(HttpServletResponse response , HttpServletRequest request, @RequestBody User user, Model model){
ResponseResult responseResult=new ResponseResult();
try {
User user2 = userService.userlogin(request, response, user);
if (user2!=null){
responseResult.setState(200);
responseResult.setMsg(" !");
return responseResult;
}else{
responseResult.setState(202);
responseResult.setMsg(" !");
return responseResult;
}
}catch (Exception e) {
responseResult.setState(500);
responseResult.setMsg(" , !");
return responseResult;
}
}
/**
*
* @param response
* @param request
* @return
* @throws Exception
*/
@GetMapping("/toLogin")
public ResponseResult getUserInfo(HttpServletResponse response , HttpServletRequest request) throws Exception {
ResponseResult responseResult=new ResponseResult();
try{
String token = userService.getUserByToken(response, request);
if(token!=null){
responseResult.setState(200);
responseResult.setMsg(" !");
return responseResult;
}else{
responseResult.setState(202);
responseResult.setMsg(" !");
return responseResult;
}
}catch (Exception e){
response.setStatus(500);
responseResult.setMsg(" !");
return responseResult;
}
}
}
Vue 프론트 엔 드1.Vue 프로젝트 생 성:vue init webpack 프로젝트 이름
2,도입 axios:npm install--save axios vue-axios
3.element 도입:npm i element-ui-S
4.src 의 main.js 에서 설정
import axios from 'axios'
import VueAxios from 'vue-axios'
// element-ui
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
// VueAxios, axios
Vue.use(VueAxios, axios)
Vue.use(ElementUI)
// axios cookie
axios.defaults.withCredentials = true;
5.src 의 components 에서 login.vue,userinfo.vue 를 만 들 고 src 의 router 에서 접근 주 소 를 설정 합 니 다.
import Vue from 'vue'
import Router from 'vue-router'
import login from '@/components/login'
import UserInfo from '@/components/userinfo'
Vue.use(Router)
export default new Router({
routes: [{
path: '/login',
component: login
}, {
path: '/user_info',
component: UserInfo
}]
})
6.전단 의 코드 는 여기에 붙 이지 않 습 니 다.코드 는 상세 한 주석 이 있 습 니 다.코드 를 다운로드 하여 보 세 요.4.코드 주소 와 프레젠테이션 효과
로그 인:
오프라인:
dome 코드 주소
링크:https://pan.baidu.com/s/1rXU46LCLpMxDzVEV_CpqFw
추출 코드:yquh
총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 SpringBoot+Vue+Redis 가 단일 로그 인(한 곳 은 로그 인 하고 다른 곳 은 로그 인 을 종료)을 실현 하 는 것 입 니 다.여러분 께 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin Springboot -- 파트 14 사용 사례 REST로 전환하여 POST로 JSON으로 전환前回 前回 前回 記事 の は は で で で で で で を 使っ 使っ 使っ て て て て て リクエスト を を 受け取り 、 reqeustbody で 、 その リクエスト の ボディ ボディ を を 受け取り 、 関数 内部 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.