小编Tim*_*o89的帖子

jax-rs rest webservice身份验证和授权

我有一个Web应用程序,需要允许用户使用不同的webclients(浏览器,本机移动应用程序等)进行注册.登录后,他们可以访问受限制的内容或他们自己的内容(如他们创建的条目等).

到目前为止我做了什么:我创建了一个jax-rs rest webservice(我在glassfish上托管我的应用程序),它暴露了以下方法:

  • 注册 - 用户POST是他想要的用户名/密码/电子邮件/等; 如果用户名/电子邮件是唯一的,则在数据库中创建该用户的条目(我使用Hibernate进行持久化)
  • login - 用户POST的用户名和密码.如果它们没问题,则创建UUID并将其返回给用户(这将用作将来请求的令牌).我有一个名为logedusers的表,其中包含userID,token,validSince作为列.

这是让我感到困惑的地方.

假设我有另一个方法getUserEntries,它应返回用户所做的所有条目.为了更清楚,将有一个包含以下字段的Entry表:entryId,userId,text.

这里最好的方法是什么?

我现在做的是,我发出一个get请求并传入令牌,如下所示:

localhost:8080/myApp/getUserEntries?token=erf34c34

之后,如果令牌有效,我从logedusers表中获取userID并基于该userId获取所有条目并将它们作为json返回.

像这样的东西:

@GET
@Path("getUserEntries")
@Produces(MediaType.APPLICATION_JSON)
public Response getUserEntries(@QueryParam("token") String token) {      
    String userId=getUserIdFromToken(token);
    if (userId == null){
        return Response.status(Response.Status.UNAUTHORIZED).build();
    } else {
        //get some data associated with that userId, put it in the response object and send it back
        return Response.ok().entity(response).build();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果有更多方法提供数据(如果有效用户调用),会发生什么?

我必须在每个方法的开头做这个检查.

我想让这个授权过程透明化

那么,这里有两个主要问题:

  1. 这个设计好吗?整个用户/通过身份验证,服务器创建并存储并向用户发送令牌,用户在将来的请求上发送令牌.
  2. 如果我有许多需要确定主叫用户身份的端点,该怎么办?我可以使用某些注释标记它们,使用某种安全提供程序/身份验证器(我可以添加自己的逻辑进行验证 - 例如检查令牌是否不超过5天等).

谢谢

authorization web-services glassfish jax-rs token

7
推荐指数
1
解决办法
3377
查看次数

在Crystal Report中的每条记录后插入空白页

我有一个Crystal报告,可以显示一个或多个(取决于输入)记录.每条记录可以有一个或多个页面.我需要在每个记录后插入一个空白页(不仅是页面上的每个记录,也是每个记录后的空白页).

我已经尝试过检查New Page Before/ New Page After但是我设法得到的只是重复的条目或报告末尾的空白页面(每个记录后我需要一个)

sql-server crystal-reports

5
推荐指数
1
解决办法
1066
查看次数

Python3 打印原始字节

我想要一个简单的单行解决方案,可以打印一个字节。

python3 -c 'print("A", end="")' | xxd -p
python3 -c 'print("\x41", end="")' | xxd -p
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,两行的输出都是 41

python3 -c 'print("\xec", end="")' | xxd -p
Run Code Online (Sandbox Code Playgroud)

这输出: c3ac

我认为这与 python3 使用 utf-8 作为默认编码的事实有关,但是我找不到一个简单的解决方案。

基本上,我想要 python3 相当于:

perl -e 'print "\xec"'
Run Code Online (Sandbox Code Playgroud)

python printing python-3.x

3
推荐指数
1
解决办法
3594
查看次数