Giter VIP home page Giter VIP logo

Comments (19)

Vector6662 avatar Vector6662 commented on September 27, 2024 3

完成了开发工作,也上传到了GitHub中:https://github.com/Vector6662/jap-spring-boot-starter 。写了使用文档。
这是使用本starter的一个demo:https://github.com/Vector6662/jap-spring-boot-starter-demo
@xkcoding 谢谢老师!

from jap.

zhangyd-c avatar zhangyd-c commented on September 27, 2024 1

ok,已经转过去了

from jap.

Vector6662 avatar Vector6662 commented on September 27, 2024

Q:看了SessionUserStore的源码,里面的save()将JapConst.SESSION_USER_KEY作为key,然后get()也是根据JapConst.SESSION_USER_KEY取得japUser的。但这样的话session只能保存一个japuser实例了吧,也就是说如果登录过一次,后面不管登录多少次都只会返回第一次登陆的登录信息

A: 这个就谈到 session 的生命周期了。一次会话理论上应该就是只保留一个用户信息的。你可以把 Session 理解为 ThreadLocal,每次会话相当于一个线程。session 之间是数据隔离的,不会影响到其他人。

Q:同一个客户端发来的request在服务器对应的session是一个,可以这么理解吗

A:不准确,需要再加一点修饰。同一个客户端发来的request在服务器「在一段时间内」对应的session是一个,因为 session 有默认的存活时间,过期了,就会重新创建一个。

from jap.

Vector6662 avatar Vector6662 commented on September 27, 2024

创建四种Strategy类的单例,交由bean容器管理。提供两种方式指定创建strategy实例所需的JapUserService对象:

  1. JapUserService的实现类上使用注解:@Service(JapServiceType.SOCIAL)
  2. application.properties中配置:jap.simple-user-service = com.fujieid.jap.spring.boot.starter.service.JapSimpleUserServiceImpl,指定该service类的binary name。

目前实现了两个特性:

  1. 考虑到开发者可能只采用四种策略的其中几种进行认证,故创建四种strategy类的单例时允许暂时不指定JapUserService实现类。
  2. 考虑到每一次请求上下文是与当前线程绑定的,因此在JapStrategyFactory提供的API中都不必开发者显式传递requestresponse参数。

socialStrategy为例,展示三种主要的调用方式:

@Autowired
JapStrategyFactory japStrategyFactory;
@Autowired
JapProperties japProperties;
@Autowired
SocialStrategy socialStrategy;

方式一

japStrategyFactory.authenticate(Strategy.SOCIAL);

方式二,若采用的策略尚未指定JapUserService,可调用此方法。但不允许重复指定JapUserService实现。

japStrategyFactory.authenticate(Strategy.SOCIAL,socialUserService);

方式三

socialStrategy.authenticate(japProperties.getSocial(), request, response);

代码已经提交gitlab,请老师过目并提出宝贵意见!😁

from jap.

Vector6662 avatar Vector6662 commented on September 27, 2024

完成五个starter的模块化开发,创建了jap-spring-boot-starter-demo项目测试了部分strategy。目前的问题是当前模块化方式是否合理❓
以simple strategy为例,创建了jap-simple-spring-boot-starter模块,里边只有一个@Configuration注解的配置类:SimpleAutoConfiguration,该类只负责向bean容器中注入一个bean对象:SimpleStrategy。这样做的一个优点是,只有开发者引入了jap-simple-spring-boot-starter模块的maven依赖,才能使用这个simple策略。
然而发现的问题是,这四个strategy的配置信息都在jap-spring-boot-starter这个模块中,而每个像jap-simple-spring-boot-starter这样的strategy自己的模块只负责创建自己的bean,个人的设想是每个strategy的模块中应该还要包含该类的配置信息,但随之而来的问题是,没有找到很好的方法集成到JapTemplate中,但目前还在尝试。

from jap.

xkcoding avatar xkcoding commented on September 27, 2024

你看能否抽取公共配置到一个 common( 模块名字看你喜好,也可以叫做config ) 模块下,然后其余模块依赖 common 模块,先研究能否抽取公共配置~

我看了下你的代码,其实你是把配置等信息放在 jap-spring-boot-starter 模块下的,这一块我觉得是否可以参考下官方的 spring-boot-starter-jpa 模块,看看他是怎么设计的?

@zhangyd-c 亚东也可以给点意见~

from jap.

Vector6662 avatar Vector6662 commented on September 27, 2024

你看能否抽取公共配置到一个 common( 模块名字看你喜好,也可以叫做config ) 模块下,然后其余模块依赖 common 模块,先研究能否抽取公共配置~

我看了下你的代码,其实你是把配置等信息放在 jap-spring-boot-starter 模块下的,这一块我觉得是否可以参考下官方的 spring-boot-starter-jpa 模块,看看他是怎么设计的?

@zhangyd-c 亚东也可以给点意见~

好的,我去看看!

from jap.

Vector6662 avatar Vector6662 commented on September 27, 2024

测试oauth策略的时候发现OauthStrategy.authnticate(...)有这么几行:

image

即每次授权之前都会检查当前session中是否有用户,如果有的话则直接返回这个japUser。但是设想这样的场景:一个用户在同一个浏览器先后用Gitee和GitHub授权给我的应用,但在进行GitHub授权的时候session中已经有了前一次gitee授权的信息,这样是否会形成干扰?

@xkcoding @zhangyd-c
感谢两位老师!

from jap.

Vector6662 avatar Vector6662 commented on September 27, 2024

对oauthStrategy测试了一下,发现用GitHub的Oauth得到的返回值是这样的:

access_token=gho_16C7e42F292c6912E7710c838347Ae178B4a&token_type=bearer

明显不是json格式,但要将其解析成json格式:
image

会报错。是否需要在请求的header上加上:Accept:application/json呢?

from jap.

xkcoding avatar xkcoding commented on September 27, 2024

问题 1:流程:新用户:登录-绑定-退出

问题 2:是的,现在是需要加上 Accept: application/json 才会返回 json 数据,这块我记得之前的是默认返回 json 的,可能 GitHub 做了调整

from jap.

zhangyd-c avatar zhangyd-c commented on September 27, 2024

测试oauth策略的时候发现OauthStrategy.authnticate(...)有这么几行:

image

即每次授权之前都会检查当前session中是否有用户,如果有的话则直接返回这个japUser。但是设想这样的场景:一个用户在同一个浏览器先后用Gitee和GitHub授权给我的应用,但在进行GitHub授权的时候session中已经有了前一次gitee授权的信息,这样是否会形成干扰?

@xkcoding @zhangyd-c
感谢两位老师!

我感觉你这个问题的逻辑可能存在问题,既然已经登录过了,为什么还要重复登录?正确的流程应该是:

  1. 使用 gitee 登录成功
  2. 退出 gitee 登录
  3. 使用 github 登录

from jap.

Vector6662 avatar Vector6662 commented on September 27, 2024

测试oauth策略的时候发现OauthStrategy.authnticate(...)有这么几行:
image
即每次授权之前都会检查当前session中是否有用户,如果有的话则直接返回这个japUser。但是设想这样的场景:一个用户在同一个浏览器先后用Gitee和GitHub授权给我的应用,但在进行GitHub授权的时候session中已经有了前一次gitee授权的信息,这样是否会形成干扰?
@xkcoding @zhangyd-c
感谢两位老师!

我感觉你这个问题的逻辑可能存在问题,既然已经登录过了,为什么还要重复登录?正确的流程应该是:

  1. 使用 gitee 登录成功
  2. 退出 gitee 登录
  3. 使用 github 登录

明白了!确实应该是这样,我的逻辑有问题,谢谢东哥!

from jap.

Vector6662 avatar Vector6662 commented on September 27, 2024

问题 1:我研究一下,在更新答案..

问题 2:是的,现在是需要加上 Accept: application/json 才会返回 json 数据,这块我记得之前的是默认返回 json 的,可能 GitHub 做了调整

问题1:谢谢沈老师!我也觉得东哥关于这个问题的回答有道理😄。
问题2:了解!是否需要修改一下jap源码呢?如果需要我可以试着提交一个PR。

from jap.

xkcoding avatar xkcoding commented on September 27, 2024

沈老师我想问一个问题,我看到您写的justauth-spring-boot-starter中这个配置类是abstract的,这样做的目的是什么呢?
image

其实我这个是参考 org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration 实现的,当时我在设计 state 缓存的不同实现的时候,发现这个逻辑不就跟数据源选择的逻辑一致么,所以是受他启发的

from jap.

Vector6662 avatar Vector6662 commented on September 27, 2024

沈老师我想问一个问题,我看到您写的justauth-spring-boot-starter中这个配置类是abstract的,这样做的目的是什么呢?
image

其实我这个是参考 org.springframework.boot.autoconfigure.jdbc.DataSourceConfiguration 实现的,当时我在设计 state 缓存的不同实现的时候,发现这个逻辑不就跟数据源选择的逻辑一致么,所以是受他启发的

明白,我去看看!

from jap.

zhangyd-c avatar zhangyd-c commented on September 27, 2024

问题 1:我研究一下,在更新答案..
问题 2:是的,现在是需要加上 Accept: application/json 才会返回 json 数据,这块我记得之前的是默认返回 json 的,可能 GitHub 做了调整

问题1:谢谢沈老师!我也觉得东哥关于这个问题的回答有道理😄。 问题2:了解!是否需要修改一下jap源码呢?如果需要我可以试着提交一个PR。

问题2:这个应该是在 justauth 里面进行修复。可以尝试一下

from jap.

zhangyd-c avatar zhangyd-c commented on September 27, 2024

另外,https://github.com/Vector6662/jap-spring-boot-starter-demo 这个项目也放到 组织里面吧,开发者用的时候方便找

from jap.

Vector6662 avatar Vector6662 commented on September 27, 2024

另外,https://github.com/Vector6662/jap-spring-boot-starter-demo 这个项目也放到 组织里面吧,开发者用的时候方便找

好的!

from jap.

Vector6662 avatar Vector6662 commented on September 27, 2024

oauth的scope参数为多个的情况下会有如下报错:

Illegal character in query at index 270: 
https://oauth.aliyun.com/v1/token?
code=XXX&
client_secret=XXX&
redirect_uri=http://localhost:8080/oidc/aliyun&
grant_type=authorization_code&
client_id=4408723633922655083&
scope=aliuid openid profiles  #中间用逗号或者空格分隔都会报错

我猜测应该是scope值之间的空格原因,同时
image
这里的encode为false。我测试了一下,如果将encode改为true,就可以请求成功:
image

若为false便会报错:
image

我的oathConfig实例的scope值如下:
image

进行post请求时:
image

@xkcoding @zhangyd-c 谢谢两位老师!

from jap.

Related Issues (1)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.