我想知道,以下两者之间的主要区别是什么:
我知道@SessionScoped和@Stateful允许为每个客户端创建一个新实例.我也知道,对于@ApplicationScoped和@Singleton/@Stateless,它们在客户端之间共享.
但是,我什么时候应该考虑选择一个EJB或另一个更好?
我目前正在开展一个项目,我们希望用户通过Facebook和其他OAuth2提供商登录.此外,REST api应该是无状态的.因此,不应创建/使用cookie/jsessionids.对于api的授权,在通过Facebook成功登录后,api会发布JWT.消耗其余api的webapp是使用AgularJS和satellizer构建的.我将代码缩减为github上的最小示例.
工作流程理念:
到目前为止工作
问题
webapp和其他api的"login/facebook?code = XXX"调用的组合不起作用.我发现当你进行GET"login/facebook"时,你将被重定向到facebook,并在网址上附加一个额外的状态参数.此外,当facebook重定向回api时,还会添加此状态参数.从我在网上找到的,这似乎是一种CSRF保护,对吧?我猜这个东西也创造了jsessionid cookie?
问题
示例代码
如前所述,我在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) 我试图将以下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) 所以我通读Bloc了状态管理flutter。
由于 Bloc 允许您下沉和流式传输(根据输入重建小部件),那么是否有可能主要使用无状态小部件来构建应用程序?
例如,假设我制作了许多单个无状态类小部件,因此几乎所有东西都被划分为自己的无状态小部件。
使用 Bloc 状态管理,我可以简单地重建某个无状态的子小部件来反映更改。
在这种方法中,我认为不需要使用有状态小部件。当然,作为一个完全的初学者flutter,我想听听这种方法是否有任何优点。
这是一个好方法吗?任何信息将不胜感激。
我想知道"无状态协议"的相反之处是什么.我是否正确地假设,例如,看到HTTP是无状态的,那么像FTP这样的协议是维持状态的相反/一个?
谢谢.
我发现是这样的:
"有状态 - 跟踪先前存储的用于当前交易的信息.
无状态 - 每次交易都像第一次完成一样进行.以前没有存储用于当前事务的信息.
在纯粹的无状态环境中,您不需要此会话ID.每个请求都包含服务器需要处理的所有信息.但是许多应用程序需要维护状态以跟踪会话是否经过身份验证以查看某些内容或跟踪用户正在做什么.您不希望通过网络为每个请求发送用户凭据."
我很困惑.因此,如果无状态会话与cookie保持状态,那么它意味着:无状态会话与cookie =会话状态?
另一个想法.我发现会话无状态是客户端会话和有状态是服务器端会话的信息.如果无状态会话不维护会话,我们如何讨论客户端会话?
我有一个简单的WCF服务,允许客户端/消费者应用程序通过提供用户名和密码登录.如果用户名和密码都正确,则WCF服务为客户端提供GUID.然后将GUID和用户名存储为WCF服务中的键/值对.从此处开始,客户端将每个请求的GUID作为识别手段发送.
由于我将键/值对存储在Dictionary/Hashmap中,因此只有在WCF服务有状态时,此方法才有效.问题是,它们是默认的有状态还是我必须做些什么来使它们以这种方式表现?
必须是一个"四人帮"策略的类是完全无状态的(即没有字段)还是它可以包含不可变状态(即最终字段)?
我很好奇如何解决RESTful API的并发问题.更具体地说,我有一组需要手动检查和更新的对象,例如需要手动更新列的行数; 但是,如果我向多个客户端打开API,他们都将从上到下抓取这些项目,因此许多用户将同时填充同一行的列.我宁愿没有冲突,简单,有状态的方法是将项目转储到服务的队列中,并在人们请求时将其弹出.
什么是无状态版本?按IP地址哈希,还是根据id随机获取行?
::更新::
"嗯,从客户的角度来看,它必须只是无国籍?
这当然很有意义.我刚刚阅读了一篇关于RESTful API的文章(ibm.com/developerworks/webservices/library/ws-restful),在遇到有关分页的问题之后,我担心我的状态非常好的队列类似于页面递增,但是它们实际上是完全不同的,因为"下一页"在客户端是相对的,而"pop"对于客户端来说总是无状态的:以前弹出的内容并不重要.
谢谢你清理我的脑袋!" - 我
我试图理解token-based authentication这些日子,它声称是一种stateless authentication方法.我遇到了这个概念stateless web application.
以下是我读过的一些主题:
起初,我对这个想法感到非常兴奋.但越来越多的我觉得stateless是pseudo-proposition.
例如,假设我们使用客户端存储的令牌进行身份验证,我们如何对在线用户进行统计(假设没有日志)?我们应该将令牌存储在DB中吗?这不是说我们在服务器上存储状态信息吗?更重要的是,DB中的名称,年龄等普通用户信息也是某种状态信息吗?
我认为这里真正的问题不是让网络应用程序无状态,而是让网络应用程序正确处理状态信息,这样它就不会危及可伸缩性.
这取决于如何解释这个词stateless:
我更喜欢2,因为总会有一些inevitable global state(引自@ deceze对他的答案的评论).无论我们将状态信息存储为HTML 5 Web存储,HTTP标头,隐藏表单字段还是Cookie,状态仍然存在.只是它存储在服务器以外的其他地方.
我错过了什么好事吗?任何人都可以对此有所了解,这样我可以从这种心理斗争中解脱出来吗?
添加1
刚刚看了一下这本书的RESTful Web服务通过Leonard Richardson.在第4章的本节末尾Statelessness,它将状态分为Application State和Resource State.因此,我之前提到的普通用户信息和数据,如图像等,可以归类为Resource State.什么stateless指的是Application State.因此它不会破坏无状态代码存储resource state在服务器上.
但该书还提到了这样一种情况:an application key is used to restrict …