前言:
上面我們已經(jīng)假設(shè)已經(jīng)搭建好了相應(yīng)的工程,下面就是具體實現(xiàn)的業(yè)務(wù)邏輯代碼
主要以下業(yè)務(wù)代碼需要實現(xiàn):
1檩赢、sso注冊功能實現(xiàn)
2吕嘀、sso登錄功能實現(xiàn)
3、通過token獲得用戶信息
4贞瞒、Ajax跨域請求(jsonp)
1.檢測數(shù)據(jù)功能實現(xiàn)
首先我們知道偶房,我們實現(xiàn)注冊功能的時候要注意校驗,看有沒有重復(fù)的數(shù)據(jù)
功能分析
請求的url:/user/check/{param}/{type}
參數(shù):從url中取參數(shù)1军浆、String param(要校驗的數(shù)據(jù))2棕洋、Integer type(校驗的數(shù)據(jù)類型)
響應(yīng)的數(shù)據(jù):json數(shù)據(jù)。TaotaoResult乒融,封裝的數(shù)據(jù)校驗的結(jié)果true:成功false:失敗掰盘。
業(yè)務(wù)邏輯:
1摄悯、從tb_user表中查詢數(shù)據(jù)
2、查詢條件根據(jù)參數(shù)動態(tài)生成愧捕。
3奢驯、判斷查詢結(jié)果,如果查詢到數(shù)據(jù)返回false次绘。
4瘪阁、如果沒有返回true。
5邮偎、使用TaotaoResult包裝管跺,并返回。
下面是實現(xiàn)
Dao層
從tb_user表查詢禾进』砼埽可以使用逆向工程。
Service層
參數(shù):
1泻云、要校驗的數(shù)據(jù):String param
2贩绕、數(shù)據(jù)類型:int type(1、2壶愤、3分別代表username、phone馏鹤、email)
返回值:TaotaoResult
具體代碼
@Service
public class UserServiceImpl implements UserService {
@Autowired
private TbUserMapper userMapper;
@Override
public TaotaoResult checkData(String param, int type) {
// 1征椒、從tb_user表中查詢數(shù)據(jù)
TbUserExample example = new TbUserExample();
Criteria criteria = example.createCriteria();
// 2、查詢條件根據(jù)參數(shù)動態(tài)生成湃累。
//1勃救、2、3分別代表username治力、phone蒙秒、email
if (type == 1) {
criteria.andUsernameEqualTo(param);
} else if (type == 2) {
criteria.andPhoneEqualTo(param);
} else if (type == 3) {
criteria.andEmailEqualTo(param);
} else {
return TaotaoResult.build(400, "非法的參數(shù)");
}
//執(zhí)行查詢
List<TbUser> list = userMapper.selectByExample(example);
// 3、判斷查詢結(jié)果宵统,如果查詢到數(shù)據(jù)返回false晕讲。
if (list == null || list.size() == 0) {
// 4、如果沒有返回true马澈。
return TaotaoResult.ok(true);
}
// 5瓢省、使用TaotaoResult包裝,并返回痊班。
return TaotaoResult.ok(false);
}
}
-
發(fā)布服務(wù)
表現(xiàn)層
需要在taotao-sso-web中實現(xiàn)勤婚。
-
引用服務(wù)
- Controller層
請求的url:/user/check/{param}/{type}
參數(shù):從url中取參數(shù)1、String param(要校驗的數(shù)據(jù))2涤伐、Integer type(校驗的數(shù)據(jù)類型)
響應(yīng)的數(shù)據(jù):json數(shù)據(jù)馒胆。TaotaoResult缨称,封裝的數(shù)據(jù)校驗的結(jié)果true:成功false:失敗。
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/user/check/{param}/{type}")
@ResponseBody
public TaotaoResult checkData(@PathVariable String param, @PathVariable Integer type) {
TaotaoResult taotaoResult = userService.checkData(param, type);
return taotaoResult;
}
}
- 測試
啟動工程
然后訪問http://localhost:8088/user/check/zhangsan/1祝迂,可以看到如下圖所示結(jié)果睦尽。data返回false說明zhangsan這個用戶名已經(jīng)被別人注冊過了。
把用戶名修改為"zhangsan11"液兽,如下圖所示骂删,可以看到這個用戶名還沒有被注冊。
我們再測試下電話四啰,我們在數(shù)據(jù)庫中復(fù)制一個已經(jīng)注冊過的電話
我們在地址欄輸入http://localhost:8088/user/check/13333333333/2宁玫,如下圖所示「躺梗可以看到該手機號已經(jīng)被注冊了欧瘪。
下面我們再測試下郵箱是否合法,可以看到"aa@a"這個郵箱已經(jīng)被注冊過了匙赞。
我們修改下郵箱佛掖,再試試,如下圖所示涌庭,可以看到這個郵箱沒有被注冊過芥被。
提示
當(dāng)我們寫完代碼的時候一定要自己每種情況都測試一遍,不能寫完就不管了坐榆,扔給測試拴魄,那是很浪費時間的行為!
2.注冊功能
- 功能分析
請求的url:/user/register
參數(shù):表單的數(shù)據(jù):username席镀、password匹中、phone、email
返回值:json數(shù)據(jù)豪诲。TaotaoResult
接收參數(shù):使用TbUser對象接收顶捷。
請求的方法:post
業(yè)務(wù)邏輯:
1、使用TbUser接收提交的請求屎篱。
2服赎、補全TbUser其他屬性。
3交播、密碼要進行MD5加密专肪。 - Dao層
可以使用逆向工程。 - Service層
參數(shù):TbUser
返回值:TaotaoResult
@Override
public TaotaoResult createUser(TbUser user) {
// 1堪侯、使用TbUser接收提交的請求嚎尤。
if (StringUtils.isBlank(user.getUsername())) {
return TaotaoResult.build(400, "用戶名不能為空");
}
if (StringUtils.isBlank(user.getPassword())) {
return TaotaoResult.build(400, "密碼不能為空");
}
//校驗數(shù)據(jù)是否可用
TaotaoResult result = checkData(user.getUsername(), 1);
if (!(boolean) result.getData()) {
return TaotaoResult.build(400, "此用戶名已經(jīng)被使用");
}
//校驗電話是否可以
if (StringUtils.isNotBlank(user.getPhone())) {
result = checkData(user.getPhone(), 2);
if (!(boolean) result.getData()) {
return TaotaoResult.build(400, "此手機號已經(jīng)被使用");
}
}
//校驗email是否可用
if (StringUtils.isNotBlank(user.getEmail())) {
result = checkData(user.getEmail(), 3);
if (!(boolean) result.getData()) {
return TaotaoResult.build(400, "此郵件地址已經(jīng)被使用");
}
}
// 2、補全TbUser其他屬性伍宦。
user.setCreated(new Date());
user.setUpdated(new Date());
// 3芽死、密碼要進行MD5加密乏梁。
String md5Pass = DigestUtils.md5DigestAsHex(user.getPassword().getBytes());
user.setPassword(md5Pass);
// 4、把用戶信息插入到數(shù)據(jù)庫中关贵。
userMapper.insert(user);
// 5遇骑、返回TaotaoResult。
return TaotaoResult.ok();
}
- 發(fā)布服務(wù)和引用服務(wù)
由于我們是在同一個服務(wù)和Controller中寫揖曾,因此不用再發(fā)布和引用 - Controller
請求的url:/user/register
參數(shù):表單的數(shù)據(jù):username落萎、password、phone炭剪、email
返回值:json數(shù)據(jù)练链。TaotaoResult
接收參數(shù):使用TbUser對象接收。
請求的方法:post
@RequestMapping(value="/user/register", method=RequestMethod.POST)
@ResponseBody
public TaotaoResult register(TbUser user) {
TaotaoResult result = userService.createUser(user);
return result;
}
- 測試
可以使用一款工具奴拦,restclient-ui-3.5-jar-with-dependencies.jar測試接口媒鼓。
我們在URL一欄輸入http://localhost:8088/user/register,類型選擇POST错妖,如下圖所示
我們點擊"Body"一欄绿鸣,點擊下拉框會出現(xiàn)下拉菜單讓我選擇,我們選擇"String body"
選擇String body后如下圖所示暂氯,默認(rèn)的content-type是"text/plain"潮模,我們要把它改成表單類型
我們按照如下圖所示更改content-type類型
下面我們添加參數(shù),如下圖所示痴施,添加四個參數(shù)擎厢。
添加完之后,點擊"Generate"晾剖,如下圖所示。
下面發(fā)送請求梯嗽,如下圖所示齿尽,可以看到返回的提示是用戶名重復(fù)了。
其實我們輸入的四個參數(shù)都是在數(shù)據(jù)庫中存在的灯节,除了密碼循头,其它三個都會報不能重復(fù)的錯誤,要想不報錯炎疆,我們要把用戶名卡骂、電話、郵箱三個個參數(shù)都修改下形入,改成數(shù)據(jù)庫中不存在的數(shù)據(jù)全跨。如下圖所示∫谒欤可以看到返回的狀態(tài)碼是200浓若,說明成功了