第二十篇:單點登錄系統(tǒng)的具體實現(xiàn)(1)

前言:
上面我們已經(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層

image.png

參數(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ù)


    image.png

表現(xiàn)層
需要在taotao-sso-web中實現(xiàn)勤婚。

  • 引用服務(wù)


    image.png
  • 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)被別人注冊過了。
    image.png

    把用戶名修改為"zhangsan11"液兽,如下圖所示骂删,可以看到這個用戶名還沒有被注冊。
    image.png

    我們再測試下電話四啰,我們在數(shù)據(jù)庫中復(fù)制一個已經(jīng)注冊過的電話
    image.png

    我們在地址欄輸入http://localhost:8088/user/check/13333333333/2宁玫,如下圖所示「躺梗可以看到該手機號已經(jīng)被注冊了欧瘪。
    image.png

    下面我們再測試下郵箱是否合法,可以看到"aa@a"這個郵箱已經(jīng)被注冊過了匙赞。
    image.png

    我們修改下郵箱佛掖,再試試,如下圖所示涌庭,可以看到這個郵箱沒有被注冊過芥被。
    image.png

    提示
    當(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測試接口媒鼓。
    image.png

    我們在URL一欄輸入http://localhost:8088/user/register,類型選擇POST错妖,如下圖所示
    image.png

    我們點擊"Body"一欄绿鸣,點擊下拉框會出現(xiàn)下拉菜單讓我選擇,我們選擇"String body"
    image.png

    選擇String body后如下圖所示暂氯,默認(rèn)的content-type是"text/plain"潮模,我們要把它改成表單類型
    image.png

    我們按照如下圖所示更改content-type類型
    image.png

    下面我們添加參數(shù),如下圖所示痴施,添加四個參數(shù)擎厢。
    image.png

    添加完之后,點擊"Generate"晾剖,如下圖所示。
    image.png

    下面發(fā)送請求梯嗽,如下圖所示齿尽,可以看到返回的提示是用戶名重復(fù)了。
    image.png

    其實我們輸入的四個參數(shù)都是在數(shù)據(jù)庫中存在的灯节,除了密碼循头,其它三個都會報不能重復(fù)的錯誤,要想不報錯炎疆,我們要把用戶名卡骂、電話、郵箱三個個參數(shù)都修改下形入,改成數(shù)據(jù)庫中不存在的數(shù)據(jù)全跨。如下圖所示∫谒欤可以看到返回的狀態(tài)碼是200浓若,說明成功了
    image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渺杉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子挪钓,更是在濱河造成了極大的恐慌是越,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碌上,死亡現(xiàn)場離奇詭異倚评,居然都是意外死亡,警方通過查閱死者的電腦和手機馏予,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門天梧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吗蚌,你說我怎么就攤上這事腿倚。” “怎么了蚯妇?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵敷燎,是天一觀的道長。 經(jīng)常有香客問我箩言,道長硬贯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任陨收,我火速辦了婚禮饭豹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘务漩。我一直安慰自己拄衰,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布饵骨。 她就那樣靜靜地躺著翘悉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪居触。 梳的紋絲不亂的頭發(fā)上妖混,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音轮洋,去河邊找鬼制市。 笑死,一個胖子當(dāng)著我的面吹牛弊予,可吹牛的內(nèi)容都是我干的祥楣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荣堰!你這毒婦竟也來了床未?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤振坚,失蹤者是張志新(化名)和其女友劉穎薇搁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渡八,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡啃洋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了屎鳍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宏娄。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖逮壁,靈堂內(nèi)的尸體忽然破棺而出孵坚,到底是詐尸還是另有隱情,我是刑警寧澤窥淆,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布卖宠,位于F島的核電站,受9級特大地震影響忧饭,放射性物質(zhì)發(fā)生泄漏扛伍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一词裤、第九天 我趴在偏房一處隱蔽的房頂上張望刺洒。 院中可真熱鬧,春花似錦吼砂、人聲如沸逆航。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽因俐。三九已至,卻和暖如春赖瞒,著一層夾襖步出監(jiān)牢的瞬間女揭,已是汗流浹背蚤假。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工栏饮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人磷仰。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓袍嬉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伺通,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容