使用Apache Shiro进行Restful Web服务的身份验证和授权

8
我可以使用通过JDBC relam连接数据库的Apache Shiro对基于Web的应用程序进行身份验证。此外,我可以成功使用Shiro-Filters通过在web.xml中设置Shiro过滤器配置和在shiro.ini中进行配置来授予特定Web资源或HTTP URL的访问权限。
现在,我想为Web服务实施相同的功能。特别是,如果凭据有效,我想让用户点击登录URL以获取令牌。之后,所有对Web服务的后续请求都必须基于该特定用户的令牌进行验证。 我不知道如何实现这一点。任何建议、步骤或建议性链接都可以帮助我很多!
3个回答

3
我建议您使用Jersey Web框架,因为它非常简单,使用Java编写并进行了注释!
您可以在shiro.ini中指定uri、角色和权限,然后在Jersey上创建Web项目。
之后,在Java代码中使用将变得清晰简单!请查看如何检索
Jersey中的代码:
/**
     * login to app
     * @param username
     * @param password
     * @return
     * since v0.6.4 
     */
    @PUT
    @Path("login")
    @Produces({"application/json"})
    public Response loginv3(
            @FormParam("username") String username,
            @FormParam("password") String password){

        return login(username, password);
    }

在这种情况下,我们只会检索图书,如果用户已连接并且我们拥有“读者”角色:
  @GET
    @Path("/books")
    @Produces({"application/json"})
    @RequiresUser
    @RequiresRoles("reader")

这很简单!请查看shiro文档:shiro注解参考


嗨,Jean,谢谢你的回复!当用户尝试访问获取图书的服务时,如何进行身份验证。令牌如何知道这个特定的用户已经登录!当他通过不同的浏览器登录后,一旦获得令牌。 - Prem Singh Bist
用户已通过Shiro进行身份验证。请fork shiro示例应用程序。请给我一些反馈!:) 谢谢 - jeorfevre
4
你永远不应该使用 @QueryParam 来传递用户和密码进行身份验证。我不能对此答案进行投票,但这是一种不安全的方法。 - Pablo Andrés Martínez Vargas
你是对的 @PabloAndrésMartínezVargas,我的错,我正在更正它! - jeorfevre

0

这个机制是由shiro实现的,令牌被传递到浏览器并存储为客户端导航器上的cookie。之后,shiro将通过浏览器在每个连接中传递令牌到服务端。

首先尝试通过应用程序进行身份验证:authen shiro doc

请实现shiro Step by Step project以验证身份验证和授权的概念! :)

请给我一些反馈。享受它:)


你能提供任何参考例子吗?!! - Prem Singh Bist
请在GitHub上fork此项目:Shiro参考示例GIT。给我一些反馈。 - jeorfevre

-1

使用Shiro进行用户认证,请参考GIT上的shiro示例。只需fork此git即可使其正常工作。

Shiro会传递一个cookie以保持连接! :) cookie的传输由Shiro管理,您无需考虑它。

享受吧 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接