【问题标题】:Apache shiro with jersey带球衣的 Apache shiro
【发布时间】:2014-12-01 09:08:12
【问题描述】:

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

我找到了一些教程,展示了如何在 Web 应用程序中使用 apache shiro。他们使用具有用户名和密码字段的 .jsp 页面显示登录方法,并且此 .jsp 页面在 shiro.ini 中配置如下:

[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.ini 配置文件:

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

一旦用户无法通过身份验证登录我包括/security/login = anon。

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

【问题讨论】:

    标签: authentication jersey shiro


    【解决方案1】:

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

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

    你的 shiro.ini 看起来像这样:

    [main]
    myRealm = com.my.package.MyRealm
    myAuthc = com.my.package.MyAuthenticationFilter
    
    [urls]
    /public/** = anon
    /** = myAuthc
    

    您需要同时实现领域和过滤器。您可以使用AuthenticatingFilter 或什至其中一个子类(如BasicHttpAuthenticationFilter)来实现过滤器。领域可以使用AuthenticatingRealm 类来实现。

    更多关于领域here 和更多关于 Shiro 网络 here。请注意,要使您的过滤器可用,您需要做的基本上是在 web.xml 上设置过滤器

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

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 2014-11-15
      • 2016-05-05
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 2013-08-11
      • 2020-03-15
      • 1970-01-01
      相关资源
      最近更新 更多