当前位置: 首页 > 知识库问答 >
问题:

阿帕奇四郎与泽西

慕容灿
2023-03-14

我正在使用jersey构建一个web服务应用程序。使用apache shiro进行授权/身份验证im。

我找到了一些演示如何在web应用程序中使用apache shiro的教程。它们使用显示登录方法。具有用户名和密码字段的jsp页面,并且超过此字段。jsp页面是在shiro中配置的。我喜欢这样:

[main]

shiro.loginUrl = /login.jsp

[urls]
/login.jsp = authc
/logout = logout

我想知道如何在没有任何密码的情况下进行身份验证。jsp页面,因为我的项目只有web服务。因此,我想我需要一个登录服务,然后我创建了一个:

@POST
@Path("/login")
public Response login(@FormParam("username") final String username, @FormParam("password") final String password, @FormParam("remember") final boolean remember) {

    final Subject currentUser = SecurityUtils.getSubject();

    if (!currentUser.isAuthenticated()) {
        final UsernamePasswordToken token = new UsernamePasswordToken(username, password);
        try {
            token.setRememberMe(remember);
            currentUser.login(token);
        } catch (final AuthenticationException e) {
            return Response.status(Status.BAD_REQUEST).entity("Usuário ou senha inválido").build();
        }
    }

这是我的shiro.iniconf:

[urls]
/security/login = anon
/security/isAuthenticated = anon
/** = authcBasic

一旦用户无法通过身份验证登录,i include/security/login=anon。

这是在webservice环境中使用apache shiro对用户进行身份验证的正确方法吗?

共有1个答案

闻修筠
2023-03-14

您不需要登录服务。实际上,验证和使用服务应该是两件不同的事情。您需要做的是:

  • 知道您要验证哪些页面
  • 配置Shiro通过您的身份验证方法对这些页面进行身份验证。

你的西罗。ini将看到以下内容:

[main]
myRealm = com.my.package.MyRealm
myAuthc = com.my.package.MyAuthenticationFilter

[urls]
/public/** = anon
/** = myAuthc

您将需要实现领域和过滤器。您可以使用AuthentiatingFilter甚至子类之一来实现过滤器,例如BasicHttpAuthentiationFilter。该领域可以使用AuthenticatingRealm类来实现。

更多关于realms的信息,更多关于Shiro的信息。请注意,要使过滤器可用,您需要做的基本上是在web上设置过滤器。xml

在对领域和过滤器进行编码之后,您的代码应该可以按预期工作。如shiro上所定义。ini以public开头的任何路径都不会经过身份验证,所有其他路径都将通过您的com进行身份验证。我的包裹MyAuthenticationFilter。请注意,顺序很重要:如果您首先定义/**=myAuthc行,它将验证所有内容,包括以/public开头的路径。

 类似资料:
  • Apache Kafka:分布式消息传递系统 Apache Storm:实时消息处理 我们如何在实时数据管道中使用这两种技术来处理事件数据? 在实时数据管道方面,我觉得两者做的工作是一样的。如何在数据管道上同时使用这两种技术?

  • 我正在使用Flink从Apache Pulsar读取数据。我在pulsar中有一个分区主题,有8个分区。在本主题中,我生成了1000条消息,分布在8个分区中。我的笔记本电脑中有8个内核,因此我有8个子任务(默认情况下,并行度=#个内核)。在执行Eclipse中的代码后,我打开了Flink UI,发现一些子任务没有收到任何记录(空闲)。我希望所有8个子任务都能得到利用(我希望每个子任务都映射到我的主

  • 我们需要的是直接的API来设置和使用集群消息队列。我们最初的计划是使用Camel在集群JMS或ActiveMQ队列上进行消费/生产。Kafka如何使这项任务变得更容易?在任何一种情况下,应用程序本身都将在WebLogic服务器上运行。 消息传递将是点对点类型,其中有多个相同服务的实例在运行,但根据负载平衡策略,只有一个实例应该处理消息并发出结果。消息队列也是群集的,因此服务实例或队列实例的失败都不

  • 目前我正在研究Apache spark和Apache ignite框架。 这篇文章介绍了它们之间的一些原则差异,但我意识到我仍然不理解它们的目的。 我的意思是,哪一个问题更容易产生火花而不是点燃,反之亦然?

  • 我正试图找出这两种设置之间的区别。大小和缓冲区。Kafka制作人的记忆。 据我所知。大小:这是可以发送的批次的最大大小。 文档描述了缓冲区。memory as:生产者可以用来缓冲等待发送的记录的内存字节。 我不明白这两者之间的区别。有人能解释一下吗? 谢啦

  • 我正在做一个学术项目,涉及传感器的流数据。我已经包围了苍鹭(Storm的接班人)和尼菲。两者都支持内置背压,这对我的项目至关重要。Apache Nifi和Heron之间的主要区别是什么? 哪款更适合物联网应用?