标签: stateless

差异:@SessionScoped vs @Stateful和@ApplicationScoped vs @Singleton

我想知道,以下两者之间的主要区别是什么:

  1. javax.enterprise.context.SessionScopedjavax.ejb.Stateful
  2. javax.enterprise.context.ApplicationScoped和javax.ejb.Singleton

我知道@SessionScoped@Stateful允许为每个客户端创建一个新实例.我也知道,对于@ApplicationScoped@Singleton/@Stateless,它们在客户端之间共享.

但是,我什么时候应该考虑选择一个EJB或另一个更好?

java singleton ejb stateful stateless

12
推荐指数
1
解决办法
1万
查看次数

如何使Spring Security OAuth2真正无状态/摆脱"状态"参数?

我目前正在开展一个项目,我们希望用户通过Facebook和其他OAuth2提供商登录.此外,REST api应该是无状态的.因此,不应创建/使用cookie/jsessionids.对于api的授权,在通过Facebook成功登录后,api会发布JWT.消耗其余api的webapp是使用AgularJS和satellizer构建的.我将代码缩减为github上最小示例.

工作流程理念:

  1. 用户进入该网站,选择"使用Facebook登录"
  2. Web应用程序打开一个弹出窗口,显示Facebook登录页面
  3. 用户登录,接受和Facebook重定向到webapp
  4. webapp从Facebook接收令牌并使用它登录到其余的api(GET/login/facebook?code = XXXXXXXXXXXXXXXXX)
  5. 其余的api返回JWT.
  6. webapp使用JWT来针对任何进一步的请求对其余api进行授权.

到目前为止工作

  • webapp可以处理步骤1到4
  • 如果您使用从执行GET的OAuth2ClientContextFilter获取的重定向到没有代码参数的"/ login/facebook",其余的api可以处理步骤5和6.(此重定向发送到Facebook,您登录后,您将再次重定向到api.)
  • 其余的api是无状态的,没有创建/需要jsessionid/cookies(禁​​用csrf并使用SessionCreationPolicy.STATELESS).除了 "登录/ facebook"调用,这个仍然创建一个jsessionid.

问题

webapp和其他api的"login/facebook?code = XXX"调用的组合不起作用.我发现当你进行GET"login/facebook"时,你将被重定向到facebook,并在网址上附加一个额外的状态参数.此外,当facebook重定向回api时,还会添加此状态参数.从我在网上找到的,这似乎是一种CSRF保护,对吧?我猜这个东西也创造了jsessionid cookie?

问题

  1. 以上工作流程是否合理?
  2. 我的用例中是否需要此CSRF保护?
  3. 我怎么能禁用这种行为?我的意思是,我使用了SessionCreationPolicy.STATELESS,但Spring仍然使用jsessionid创建了一个会话.那我怎样才能创建一个真正的无状态休息api呢?(至少关于饼干...)
  4. 这是正确的方法吗?或者我错过了什么?

示例代码

如前所述,我在GitHub上放了一个完整的最小例子.在这里,我将只发布WebSecurityConfigurerAdapter(希望)最重要的部分.该完整的文件在这里.

@EnableOAuth2Client
@Configuration
public class OAuth2ClientConfigurer extends WebSecurityConfigurerAdapter {

@Autowired
private OAuth2ClientContext oAuth2ClientContext;

@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
    httpSecurity
            .csrf().disable()
            .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).enableSessionUrlRewriting(false).and()
            .antMatcher("/**").authorizeRequests()
            .antMatchers("/login/**").permitAll()
            .anyRequest().authenticated().and()
            .exceptionHandling().authenticationEntryPoint(new Http403ForbiddenEntryPoint()).and()
            .addFilterBefore(statelessJwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
            .addFilterBefore(createSsoFilter(facebook(), facebookSuccessHandler(), "/login/facebook"), BasicAuthenticationFilter.class);
}

private OAuth2ClientAuthenticationProcessingFilter createSsoFilter(ClientResourceDetails clientDetails, AuthenticationSuccessHandler successHandler, String path) { …
Run Code Online (Sandbox Code Playgroud)

spring stateless jsessionid jwt spring-security-oauth2

12
推荐指数
1
解决办法
1096
查看次数

C++中是否可以使用无状态访问者模式?

我试图将以下Haskell代码转换为C++:

data List t = Nil | Cons t (List t)
Run Code Online (Sandbox Code Playgroud)

将代数数据类型直接转换为无状态访问者模式会产生以下Java代码

interface List<T> {
  <R> R accept(ListVisitor<T,R> v);
}

interface ListVisitor<T,R> {
  R visitNil();
  R visitCons(T head, List<T> tail);
}

class Nil<T> implements List<T> {
  @Override
  public <R> R accept(ListVisitor<T,R> v) {
    return v.visitNil();
  }
}

class Cons<T> implements List<T> {
  public final T head;
  public final List<T> tail;
  public Cons(T head, List<T> tail) {
    this.head = head;
    this.tail = tail;
  }
  @Override
  public <R> R accept(ListVisitor<T,R> v) { …
Run Code Online (Sandbox Code Playgroud)

c++ templates visitor stateless

11
推荐指数
1
解决办法
1015
查看次数

Flutter 状态管理 (BloC):无状态与有状态小部件

所以我通读Bloc了状态管理flutter

由于 Bloc 允许您下沉和流式传输(根据输入重建小部件),那么是否有可能主要使用无状态小部件来构建应用程序?

例如,假设我制作了许多单个无状态类小部件,因此几乎所有东西都被划分为自己的无状态小部件。

使用 Bloc 状态管理,我可以简单地重建某个无状态的子小部件来反映更改。

在这种方法中,我认为不需要使用有状态小部件。当然,作为一个完全的初学者flutter,我想听听这种方法是否有任何优点。

这是一个好方法吗?任何信息将不胜感激。

stateless dart flutter bloc

11
推荐指数
2
解决办法
4464
查看次数

与无国籍议定书相反?

我想知道"无状态协议"的相反之处是什么.我是否正确地假设,例如,看到HTTP是无状态的,那么像FTP这样的协议是维持状态的相反/一个?

谢谢.

protocols stateless

10
推荐指数
1
解决办法
5716
查看次数

无状态与cookie和有状态

我发现是这样的:

"有状态 - 跟踪先前存储的用于当前交易的信息.

无状态 - 每次交易都像第一次完成一样进行.以前没有存储用于当前事务的信息.

在纯粹的无状态环境中,您不需要此会话ID.每个请求都包含服务器需要处理的所有信息.但是许多应用程序需要维护状态以跟踪会话是否经过身份验证以查看某些内容或跟踪用户正在做什么.您不希望通过网络为每个请求发送用户凭据."

我很困惑.因此,如果无状态会话与cookie保持状态,那么它意味着:无状态会话与cookie =会话状态?

另一个想法.我发现会话无状态是客户端会话和有状态是服务器端会话的信息.如果无状态会话不维护会话,我们如何讨论客户端会话?

session stateless

10
推荐指数
1
解决办法
6976
查看次数

默认情况下WCF服务是无状态的吗?

我有一个简单的WCF服务,允许客户端/消费者应用程序通过提供用户名和密码登录.如果用户名和密码都正确,则WCF服务为客户端提供GUID.然后将GUID和用户名存储为WCF服务中的键/值对.从此处开始,客户端将每个请求的GUID作为识别手段发送.

由于我将键/值对存储在Dictionary/Hashmap中,因此只有在WCF服务有状态时,此方法才有效.问题是,它们是默认的有状态还是我必须做些什么来使它们以这种方式表现?

c# wcf stateful stateless

9
推荐指数
1
解决办法
1万
查看次数

战略模式应该是无国籍的吗?

必须是一个"四人帮"策略的类是完全无状态的(即没有字段)还是它可以包含不可变状态(即最终字段)?

design-patterns strategy-pattern stateless

9
推荐指数
3
解决办法
2181
查看次数

RESTful API必须是无状态的,但是并发性呢?

我很好奇如何解决RESTful API的并发问题.更具体地说,我有一组需要手动检查和更新的对象,例如需要手动更新列的行数; 但是,如果我向多个客户端打开API,他们都将从上到下抓取这些项目,因此许多用户将同时填充同一行的列.我宁愿没有冲突,简单,有状态的方法是将项目转储到服务的队列中,并在人们请求时将其弹出.

什么是无状态版本?按IP地址哈希,还是根据id随机获取行?

::更新::

"嗯,从客户的角度来看,它必须只是无国籍?

这当然很有意义.我刚刚阅读了一篇关于RESTful API的文章(ibm.com/developerworks/webservices/library/ws-restful),在遇到有关分页的问题之后,我担心我的状态非常好的队列类似于页面递增,但是它们实际上是完全不同的,因为"下一页"在客户端是相对的,而"pop"对于客户端来说总是无状态的:以前弹出的内容并不重要.

谢谢你清理我的脑袋!" - 我

api rest concurrency stateless

9
推荐指数
1
解决办法
1万
查看次数

无国界网络应用程序,都市传奇?

我试图理解token-based authentication这些日子,它声称是一种stateless authentication方法.我遇到了这个概念stateless web application.

以下是我读过的一些主题:

起初,我对这个想法感到非常兴奋.但越来越多的我觉得statelesspseudo-proposition.

例如,假设我们使用客户端存储的令牌进行身份验证,我们如何对在线用户进行统计(假设没有日志)?我们应该将令牌存储在DB中吗?这不是说我们在服务器上存储状态信息吗?更重要的是,DB中的名称,年龄等普通用户信息也是某种状态信息吗?

我认为这里真正的问题不是让网络应用程序无状态,而是让网络应用程序正确处理状态信息,这样它就不会危及可伸缩性.

这取决于如何解释这个词stateless:

  1. Web应用程序没有状态.
  2. 或者Web应用程序不会存储状态本身.

我更喜欢2,因为总会有一些inevitable global state(引自@ deceze对他的答案的评论).无论我们将状态信息存储为HTML 5 Web存储,HTTP标头,隐藏表单字段还是Cookie,状态仍然存在.只是它存储在服务器以外的其他地方.

我错过了什么好事吗?任何人都可以对此有所了解,这样我可以从这种心理斗争中解脱出来吗?

添加1

刚刚看了一下这本书的RESTful Web服务通过Leonard Richardson.在第4章的本节末尾Statelessness,它将状态分为Application StateResource State.因此,我之前提到的普通用户信息和数据,如图像等,可以归类为Resource State.什么stateless指的是Application State.因此它不会破坏无状态代码存储resource state在服务器上.

但该书还提到了这样一种情况:an application key is used to restrict …

session http token stateless web

9
推荐指数
2
解决办法
5090
查看次数