您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關SpringBoot中怎么利用Vue和Redis實現(xiàn)單點登錄功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
1、創(chuàng)建SpringBoot項目,創(chuàng)建User表,由于是通過Vue編寫的,所以是前后端分離,需要跨域,我這里編寫了跨域配置類,還有redis的util類,返回的封裝類,cookie的util類,文末有源碼提供,可以自行提取。
2、yum配置文件
spring: redis: database: 0 #redis的默認數(shù)據(jù)庫為0 host: 127.0.0.1 #鏈接redis的ip port: 6379 #鏈接redis的端口號 password: #鏈接redis的密碼 默認為空 jedis: pool: max-total: 200 #鏈接redis的總數(shù)目 max-active: 100 #鏈接redis的最大 max-idle: 8 #最大的鏈接數(shù)量 min-idle: 5 #最小的鏈接數(shù)量 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: trueserver: port: 8888REDIS_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進行登錄的業(yè)務邏輯處理
@Servicepublic 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,接收前端請求,返回數(shù)據(jù)
@RestControllerpublic 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("發(fā)生錯誤,登錄失??!"); 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("發(fā)生錯誤!"); return responseResult; } }}
Vue前端
1、創(chuàng)建Vue項目:vue init webpack 項目名稱2、引入axios:npm install --save axios vue-axios3、引入element:npm i element-ui -S4、在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, axiosVue.use(VueAxios, axios)Vue.use(ElementUI)//配置axios支持cookieaxios.defaults.withCredentials = true;
5、在src的components下創(chuàng)建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 }]})
看完上述內(nèi)容,你們對SpringBoot中怎么利用Vue和Redis實現(xiàn)單點登錄功能有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。