菜鸟求指教。Spring Security 如何指定某个用户登录成功 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FormatToday
V2EX    Java

菜鸟求指教。Spring Security 如何指定某个用户登录成功

  •  
  •   FormatToday
    FormatToday 2023-05-29 15:46:35 +08:00 2600 次点击
    这是一个创建于 865 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本来项目有账号密码登录,现在搞小程序登录,使用小程序获取用户手机号,如果库里有这个手机号,直接给他登录了,返回 token 。 现在是已经获取到了用户手机号,怎么在 Spring Security 中去指定这个用户是已登录状态,从而获取到 token 。

    workOrNot
        1
    workOrNot  
       2023-05-29 15:48:32 +08:00
    把你登陆接口的代码复用一下 不就好了吗
    lyusantu
        2
    lyusantu  
       2023-05-29 15:53:01 +08:00
    你帮他登录一下不就好了
    lyusantu
        3
    lyusantu  
       2023-05-29 15:53:38 +08:00
    @lyusantu #2 我的意思是,已经获取到了手机号,你直接隐式替他实现登录然后返回 token 给小程序的获取用户手机号的接口
    Red998
        4
    Red998  
       2023-05-29 15:54:38 +08:00
    模拟登陆下、把接口过滤下
    FormatToday
        5
    FormatToday  
    OP
       2023-05-29 15:55:05 +08:00
    @lyusantu #3 现在就是不知道怎么去替他登录,是取他的密码再去调用一下原来的登录接口吗?
    FormatToday
        6
    FormatToday  
    OP
       2023-05-29 15:56:22 +08:00
    @Red998 现在就是不知道怎么去替他登录,是取他的密码再去调用一下原来的登录接口吗?
    iceg
        7
    iceg  
       2023-05-29 16:04:19 +08:00
    org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken
    org.springframework.security.oauth2.provider.password.getOAuth2Authentication
    参考这两个方法?
    xuanbg
        8
    xuanbg  
       2023-05-29 16:05:44 +08:00
    OP 你这个其实就是变相的微信授权登录。要先获取微信的用户信息,拿到用户信息里面的手机号,然后查数据库。查到手机号就按正常的流程发一个 token 就行了。
    XE2VA
        9
    XE2VA  
       2023-05-29 16:08:48 +08:00
    @xuanbg 对,就是这种方式,具体的就是根据用户信息创建 UsernamePasswordAuthenticationToken 对象,放到 Security 上下文中。
    FormatToday
        10
    FormatToday  
    OP
       2023-05-29 16:23:57 +08:00
    @xuanbg
    @XE2VA
    请问一下,是不是就新建个 AuthenticationToken 对象放到 Security 上下文里,这个用户就已经是登录的状态了呀
    lyusantu
        11
    lyusantu  
       2023-05-29 16:28:43 +08:00
    @FormatToday #10 ...密码明文你才能取他的密码替他登录,前提是明文,非明文的话,手机号应该也是具备唯一性的?如果具备唯一性,直接单独一个业务使用手机号查询用户信息,然后按照你正常登录的业务流程生成 token 返回就行了
    kevinonepiece
        12
    kevinonepiece  
       2023-05-29 17:33:15 +08:00
    弄个超级密码,继承 BCryptPasswordEncoder ,重写 match 方法,如果是超级密码,就返回 true 。然后微信登录就手机号和超级号码去登录
    Bingchunmoli
        13
    Bingchunmoli  
       2023-05-29 20:53:20 +08:00 via Android
    @FormatToday 放入一个经过验证的 token 对象即可,或者拦截器直接返回 token 也行,文档有写的
    mmdsun
        14
    mmdsun  
       2023-05-30 00:10:08 +08:00 via iPhone
    先看看基础,学习下吧。
    你原先项目密码登录用的是 spring security 吗?

    那你照着旧代码改个,用小程序 openID 登录的不是就可以了么?

    只是一个是用户名+密码查数据库用户,一个是 openID 查数据库罢了。

    spring 默认的 UsernamePasswordAuthenticationFilter 、UsernamePasswordAuthenticationToken 直接 copy 改一份,照着配置就好了。
    JohnYehyo
        15
    JohnYehyo  
       2023-05-30 14:13:25 +08:00
    ```
    private LoginUser refreshAuth(String userName) {
    LoginUser loginUser = (LoginUser) userDetailsService.loadUserByUsername(userName);
    UsernamePasswordAuthenticationToken authenticatiOnToken= new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
    authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(ServletUtils.getRequest()));
    SecurityContextHolder.getContext().setAuthentication(authenticationToken);
    return loginUser;
    }
    ```
    然后用这个用户信息创建你的 token 返回
    siweipancc
        16
    siweipancc  
       2023-06-05 12:05:47 +08:00 via iPhone
    官方教程有 demo ,看不懂英文我就没办法了,估计你在 csdn 上找到正确方案的时间花费比从 0 学英语还久
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5953 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 06:29 PVG 14:29 LAX 23:29 JFK 02:29
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86