国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

若依前后端分離版:增加新的登錄接口,用于小程序或者APP獲取token,并使用若依的驗(yàn)證方法

這篇具有很好參考價值的文章主要介紹了若依前后端分離版:增加新的登錄接口,用于小程序或者APP獲取token,并使用若依的驗(yàn)證方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

LoginController類

基于若依開發(fā)app登錄接口,java,小程序,前端

具體代碼 
/**
     * app 登錄
     */
    @AnonymousAccess
    @PostMapping("login")
    public AjaxResult login(@RequestBody LoginBody loginBody) {
        AjaxResult ajax = AjaxResult.success();
        // 生成令牌
        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword());
        ajax.put(Constants.TOKEN, token);
        return ajax;
    }

登錄校驗(yàn) ——AppLoginService類

基于若依開發(fā)app登錄接口,java,小程序,前端

?具體代碼

@Resource
private AppAuthenticationProvider authenticationManager;

  /**
     * 登錄驗(yàn)證
     *
     * @param username 用戶名
     * @param password 密碼
     * @return 結(jié)果
     */
    public String login(String username, String password) {
        // 用戶驗(yàn)證
        Authentication authentication;
        try {
            // 該方法會去調(diào)用UserDetailsServiceImpl.loadUserByUsername
            authentication = authenticationManager
                    .authenticate(new UsernamePasswordAuthenticationToken(username, password));
        } catch (Exception e) {
            if (e instanceof BadCredentialsException) {
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
                throw new UserPasswordNotMatchException();
            } else {
                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
                throw new ServiceException(e.getMessage());
            }
        }
        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
        recordLoginInfo(loginUser.getUserId());
        // 生成token
        return tokenService.createToken(loginUser);
    }
AppAuthenticationProvider 類

基于若依開發(fā)app登錄接口,java,小程序,前端

?具體代碼

@Component
public class AppAuthenticationProvider implements AuthenticationProvider {

    private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);

    @Autowired
    private AppUserDetailsServiceImpl userDetailsService;

    @SneakyThrows
    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
        String userName = authentication.getName();// 這個獲取表單輸入中返回的用戶名;
        Object password = authentication.getCredentials();//這個獲取表單輸入中返回的密碼;

        // 這里構(gòu)建來判斷用戶是否存在和密碼是否正確
        UserDetails userInfo = userDetailsService.loadUserByUsername(userName); // 這里調(diào)用我們的自己寫的獲取用戶的方法;

        if(!SecurityUtils.matchesPassword(password.toString(),userInfo.getPassword())){
            log.info("用戶不存在/密碼錯誤,{}", userName);
            throw new ServiceException("用戶不存在/密碼錯誤");
        }        

        Collection<? extends GrantedAuthority> authorities = userInfo.getAuthorities();
        // 構(gòu)建返回的用戶登錄成功的token
        return new UsernamePasswordAuthenticationToken(userInfo, userInfo.getPassword(), authorities);
    }

    @Override
    public boolean supports(Class<?> authentication) {
//        return authentication.equals(UsernamePasswordAuthenticationToken.class);
        // 這里直接改成 return true;表示是支持這個執(zhí)行
        return true;
    }

}
AppUserDetailsServiceImpl類

基于若依開發(fā)app登錄接口,java,小程序,前端

?具體代碼

@Service
public class AppUserDetailsServiceImpl implements UserDetailsService {

    private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class);

    @Autowired
    private IProductMemberService memberService;//自己寫的接口

    @Autowired
    private IProductMemberCourtService memberCourtService;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {

        ProductMember member = memberService.selectUserByUserName(username);//驗(yàn)證登錄用戶

        if (StringUtils.isNull(member)) {
            log.info("登錄用戶:{} 不存在.", username);
            throw new ServiceException("登錄用戶:" + username + " 不存在");
        } else if (UserStatus.DELETED.getCode().equals(member.getDelFlag())) {
            log.info("登錄用戶:{} 已被刪除.", username);
            throw new ServiceException("對不起,您的賬號:" + username + " 已被刪除");
        } else if (UserStatus.DISABLE.getCode().equals(member.getStatus())) {
            log.info("登錄用戶:{} 已被停用.", username);
            throw new ServiceException("對不起,您的賬號:" + username + " 已停用");
        }

        return createLoginUser(member);
    }

    public UserDetails createLoginUser(ProductMember member) {
        return new LoginUser(member.getMemberId(), memberCourtService.selectCourtIdByMemberId(member.getMemberId()), member);
    }
}

此時運(yùn)行時,會有沖突?。?!

需要在 xxx-framework/src/main/java/....../SecurityConfig中條件

    @Qualifier("userDetailsServiceImpl")

如圖:

基于若依開發(fā)app登錄接口,java,小程序,前端

?此時啟動項(xiàng)目不會報(bào)沖突的錯

千萬千萬要添加!??!

下圖中的LongUser類要添加?xùn)|西

基于若依開發(fā)app登錄接口,java,小程序,前端

基于若依開發(fā)app登錄接口,java,小程序,前端

?要在public String getPassword(){}中添加自己寫的登錄實(shí)體類的getPassword()

以上內(nèi)容已經(jīng)可以解決app和小程序新的登錄接口方案和后臺管理的登陸獲取token不沖突

以下內(nèi)容可作為參考:

登錄認(rèn)證JWTtoken驗(yàn)證機(jī)制

后端部分
/login 接口
userName
password
code 驗(yàn)證碼
前端獲取上面三個要素后調(diào)用接口,整體改接口做了下面幾件事情

1、驗(yàn)證用戶身份(賬號密碼+驗(yàn)證碼)
2、生成token
3、保存用戶登錄態(tài)到spring security中

安全配置:定義了基本的配置信息
framework.config.SecurityConfig

UserDetailsServiceImpl 用戶驗(yàn)證處理類

登錄接口的服務(wù)類
framework.web.service.SysLoginService

JWT攔截器,攔截令牌并校驗(yàn)信息
framework.security.filter.JwtAuthenticationTokenFilter


詳細(xì)過程

1、SysLoginService 中調(diào)用UserDetailsServiceImpl校驗(yàn)用戶的密碼是否匹配以及用戶賬戶狀態(tài),校驗(yàn)通過后返回UserDetails實(shí)例,該實(shí)例包含了用戶的基本信息和菜單權(quán)限信息
2、調(diào)用tokenService.createToken(loginUser)生成token
令牌生成的詳細(xì)過程

生成uuid隨機(jī)數(shù),這個隨機(jī)數(shù)用來做rediskey存儲token
生成一個token(無時效)
攔截到的token如果距離失效在10分鐘以內(nèi)(可配置)就自動刷新有效期

前面提到了token本身無時效,有效期是通過redis控制的,因?yàn)閖wt本身未提供刷新有效期的方法(可能是我不知道)。

以上用戶調(diào)用了login接口并且獲得了token

jwt令牌校驗(yàn)
?

/**
?* token過濾器 驗(yàn)證token有效性
?*?
?* @author sj
?*/
@Component
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter
{
? ? @Autowired
? ? private TokenService tokenService;

? ? @Override
? ? protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
? ? ? ? ? ? throws ServletException, IOException
? ? {
? ? ? ? LoginUser loginUser = tokenService.getLoginUser(request);
? ? ? ? if (StringUtils.isNotNull(loginUser) && StringUtils.isNull(SecurityUtils.getAuthentication()))
? ? ? ? {
? ? ? ? ? ? tokenService.verifyToken(loginUser);
? ? ? ? ? ? UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
? ? ? ? ? ? authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
? ? ? ? ? ? SecurityContextHolder.getContext().setAuthentication(authenticationToken);
? ? ? ? }
? ? ? ? chain.doFilter(request, response);
? ? }
}


代碼比較短,所以就直接貼出來,這段代碼攔截了所有請求并且完成了令牌的校驗(yàn)和刷新,具體過程如下

1、tokenService.getLoginUser(request); 從request中獲取token并校驗(yàn),如果校驗(yàn)通過就返回LoginUser對象
2、校驗(yàn)LoginUser的token,如果再刷限期內(nèi)就直接刷新
3、將LoginUser封裝到SecurityContextHolder中作為全局的用戶登錄狀態(tài)


注:第3條有兩個好處

1、后續(xù)攔截器發(fā)現(xiàn)SecurityContextHolder中保存了用戶時,就直接通過校驗(yàn)
2、通過SecurityContextHolder可以快速獲取當(dāng)前請求的登錄信息。
以上基本上已經(jīng)說名了JWT校驗(yàn)的基本過程,忽略了很多細(xì)節(jié)

getInfo 獲取用戶信息
1、用戶的基本信息
2、用戶所有的Permissions(菜單樹)
3、用戶所有的RopePersmission(roleKeys)

基于若依開發(fā)app登錄接口,java,小程序,前端
getRouters 獲取前端頁面路由信息
這個接口完全為前端準(zhǔn)備,后面會專門講述前端的權(quán)限控制

?基于若依開發(fā)app登錄接口,java,小程序,前端文章來源地址http://www.zghlxwxcb.cn/news/detail-729530.html

到了這里,關(guān)于若依前后端分離版:增加新的登錄接口,用于小程序或者APP獲取token,并使用若依的驗(yàn)證方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于若依前后端分離框架的小程序的token驗(yàn)證

    基于若依前后端分離框架的小程序的token驗(yàn)證

    后端和管理端都用的若依框架。 但是前段的小程序需要微信授權(quán)登錄。這時候就需要在若依框架上重新再起一套token驗(yàn)證。 首先創(chuàng)建兩個類(只要放在你能夠引用得到的位置就可以): 第一個:實(shí)體 第二個service: 下一步: 找到 com.ruoyi.framework.security.filter; 這個文件 添加你

    2024年02月11日
    瀏覽(22)
  • 若依前后端分離項(xiàng)目docker部署

    若依前后端分離項(xiàng)目docker部署

    1.centos 7 2.docker 3.mysql5.x 8.x 4.redis 5.nginx 前往 Gitee 下載頁面(https://gitee.com/y_project/RuoYi-Vue (opens new window))下載解壓到工作目錄 3.1 后端 1.下載代碼到本地后,解壓完成,用idea打開項(xiàng)目 2.創(chuàng)建數(shù)據(jù)庫:ry-vue 3.在創(chuàng)建好數(shù)據(jù)庫后,運(yùn)行以下兩個sql文件生成數(shù)據(jù)表(quartz.sql、ry_202208

    2024年02月05日
    瀏覽(25)
  • 若依前端問題集合[前后端分離版本]

    若依前端問題集合[前后端分離版本]

    目錄 1.若依前后端分離頁面改變title 1.修改icon 2.修改title文字 2.若依關(guān)閉Login頁面驗(yàn)證碼 1.關(guān)閉驗(yàn)證碼 登錄雜項(xiàng) 3.若依前端替換代理地址 4.側(cè)邊菜單和全局樣式 1.側(cè)邊菜單 2.側(cè)邊欄頂部logo替換或刪除 3.全局樣式 修改背景色 修改瀏覽器title和icon圖標(biāo) 在項(xiàng)目 public 文件夾中有

    2024年02月07日
    瀏覽(85)
  • 若依項(xiàng)目的介紹(前后端分離版本)

    若依項(xiàng)目的介紹(前后端分離版本)

    目錄 一、若依介紹 (一)簡單介紹? (二)若依版本 (三)Git遠(yuǎn)程拉取步驟? 二、項(xiàng)目的技術(shù)介紹 (一)后端技術(shù) 1.spring boot 2.Spring Security安全控制 3.MyBatis 4.MySQL和Redis (二)前端技術(shù) 1.vue 2.vue-router 3.axios? 4.element-ui 5.node 6.ES6 7.Nginx反向代理服務(wù)器 三、項(xiàng)目結(jié)構(gòu)介紹 1.總體

    2024年02月12日
    瀏覽(23)
  • 【若依】框架:第01講前后端分離項(xiàng)目

    【若依】框架:第01講前后端分離項(xiàng)目

    介紹 | RuoYi ? ? ? ? 將下載好的若依項(xiàng)目導(dǎo)入IDEA,導(dǎo)入后配置MAVEN環(huán)境,等待下載完成。重點(diǎn)關(guān)注ruoyi-admin和ruoyi-system兩個文件夾,前者放controller,后者放實(shí)體類、mapper、service ①打開文件夾選擇若依前端項(xiàng)目(ruoyi-ui)文件夾 ②信任此作者進(jìn)入 ③重點(diǎn)關(guān)心src文件夾下的api和

    2023年04月08日
    瀏覽(27)
  • 若依前后端分離版集成nacos

    若依前后端分離版集成nacos

    ????????根據(jù)公司要求,需要將項(xiàng)目集成到nacos中,當(dāng)前項(xiàng)目是基于若依前后端分離版開發(fā)的,若依的版本為3.8.3,若依框架中整合的springBoot版本為2.5.14。Nacos核心提供兩個功能:服務(wù)注冊與發(fā)現(xiàn),動態(tài)配置管理。 1、引入pom依賴 2、bootstrap.yml配置 3、添加注解 在項(xiàng)目啟動類

    2023年04月12日
    瀏覽(20)
  • 從零入門開源框架---若依(前后端分離版)

    從零入門開源框架---若依(前后端分離版)

    一、若依是什么? 若依它就是一個開源項(xiàng)目,別人寫好的代碼,我們拿來進(jìn)行二次開發(fā),它主要是做數(shù)據(jù)和權(quán)限管理系統(tǒng)。 二、使用背景 任何公司的各種大的項(xiàng)目必然需要一個后臺權(quán)限管理系統(tǒng),這是必然的,但是如果不想投入太多人力物力去開發(fā),又恰好有現(xiàn)成且比較好用

    2024年02月02日
    瀏覽(35)
  • 若依使用及源碼解析(前后端分離版)

    若依使用及源碼解析(前后端分離版)

    部署環(huán)境 JDK = 1.8 MYSQL = 5.7 Maven = 3.0 Node = 12 Redis = 3 運(yùn)行若依項(xiàng)目 下載若依源碼 ?若依官網(wǎng) 若依項(xiàng)目源碼(前后端分離) 運(yùn)行后端項(xiàng)目? ruoyi-ui就是vue項(xiàng)目(這里使用vscode打開)? ?整體用idea打開 1.配置數(shù)據(jù)庫(sql提供sql文件中的sql腳本配置) 創(chuàng)建數(shù)據(jù)庫 ruoyi_vue數(shù)據(jù)庫并導(dǎo)入qua

    2024年02月07日
    瀏覽(90)
  • 四、若依(前后端分離)項(xiàng)目構(gòu)建docker 鏡像

    四、若依(前后端分離)項(xiàng)目構(gòu)建docker 鏡像

    修改配置文件參數(shù),數(shù)據(jù)庫ip和賬號密碼 修改端口號,這個修改不修改都無所謂,docker run時端口映射時修改也可以的 redis ip和端口修改 輸入目錄 rz 上傳

    2024年02月10日
    瀏覽(20)
  • 【學(xué)習(xí)】若依源碼(前后端分離版)之 “ 異常處理”

    通常一個web框架中,有大量需要處理的異常。比如業(yè)務(wù)異常,權(quán)限不足等等。前端通過彈出提示信息的方式告訴用戶出了什么錯誤。 通常情況下我們用try…catch…對異常進(jìn)行捕捉處理,但是在實(shí)際項(xiàng)目中對業(yè)務(wù)模塊進(jìn)行異常捕捉,會造成代碼重復(fù)和繁雜, 我們希望代碼中只有

    2024年02月13日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包