小编bor*_*orq的帖子

使用@PreAuthorize时,从Spring Controllers返回405 vs 403

我们最近开始在@PreAuthorize我们的REST端点上使用注释.它工作得很好,但是,我确实对发出GET与POST或PUT时返回的HTTP代码有疑问.似乎当用户未被授权访问控制器的REST端点时,返回的HTTP状态对于GET和PUT/POST是不同的.

因此,例如,如果我的端点是GET并且具有@PreAuthorize注释并且用户没有访问权限,则返回403 Forbidden.这就是我的期望.

如果然后将相同的注释放在POST或PUT的控制器方法上,则HTTP响应为405 Method Not Allowed(请注意,如果正确授权,POST/PUT方法将按预期返回200).

单步执行代码时,您可以看到底层安全过滤器返回403,但在POST/PUT场景中,状态代码被删除/忽略并替换为405,就像NullPointerExcpetion在控制器代码中出现时一样.

这是预期的行为还是应该为无法访问终点的用户返回403 Forbidden?

rest annotations spring-security

10
推荐指数
1
解决办法
1594
查看次数

使用MDS使用SocketConnection与Blackberry进行问题

我目前正在Blackberry上编写一个应用程序来简单地发送和接收一些原始数据到我网络上的另一个基于TCP的设备.我在Blackberry模拟器中遇到同样的问题,MDS模拟器运行并使用物理电话与我公司的MDS服务器通信.请注意,直接使用wifi而不是通过MDS时不会发生此问题.

问题是InputStream上的available()函数返回零,除非我先调用read().如果我先调用read(知道有一些数据可用..谢谢wireshark),数据会回来,随后对available()的调用会指示我没有读取的数据.问题是我并不总是能保证数据会存在,所以我可以阻止.是否有人意识到这一点,这是一个问题或设计的东西?

是否有人知道一种方法来测试read()方法是否会在调用它们之前阻止它们可用?

这基本上就是我在做什么:

SocketConnection s = (SocketConnection)Connector.open("socket://1.2.3.4:port;deviceside=false", Connector.READ_WRITE);

OutputStream o = ((StreamConnection)s).openOutputStream();
InputStream i = ((StreamConnection)s).openInputStream();

o.write("hello");
Thread.sleep(sometime);
if (i.available() > 0) {
   byte[] data = new data[10];
   int bytesRead = i.read(data);
   System.out.println("Read [" + new String(data) + "] (bytes = " + bytesRead + ")");
}

我必须评论if条件是否有效.

sockets networking iostream blackberry mds-cs

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