我已经实现了一个简单的文件上传下载机制.当用户单击文件名时,将使用以下HTTP标头下载该文件:
HTTP/1.1 200 OK
Date: Tue, 30 Sep 2008 14:00:39 GMT
Server: Microsoft-IIS/6.0
Content-Disposition: attachment; filename=filename.doc;
Content-Type: application/octet-stream
Content-Length: 10754
Run Code Online (Sandbox Code Playgroud)
我也支持日文文件名.为此,我用这个java方法编码文件名:
private String encodeFileName(String name) throws Exception{
String agent = request.getHeader("USER-AGENT");
if(agent != null && agent.indexOf("MSIE") != -1){ // is IE
StringBuffer res = new StringBuffer();
char[] chArr = name.toCharArray();
for(int j = 0; j < chArr.length; j++){
if(chArr[j] < 128){ // plain ASCII char
if (chArr[j] == '.' && j != name.lastIndexOf("."))
res.append("%2E");
else
res.append(chArr[j]);
}
else{ // non-ASCII …Run Code Online (Sandbox Code Playgroud) 在Web应用程序中绘制/制图的一些好工具集是什么?最好是开源/免费软件,特别是用ASP.NET MVC或Silverlight 2.0进行开发.
我们有一个服务,根据用户名和密码处理授权.我们将其放在SOAP标头中,而不是将用户名和密码作为调用的一部分.
在典型的场景中,Web Service在执行开始时调用Authorization服务以检查是否允许调用者调用它.问题是这些Web服务中的一些相互调用,这意味着在每个子调用中都会检查用户的权限,这可能非常昂贵.
我想做的是让授权服务在第一次调用后返回安全令牌.然后,Web Service可以在本地验证安全标头,而不必每次都调用授权服务.
安全标题看起来像这样(C#代码 - 修剪以说明基本概念):
public sealed class SecurityHeader : SoapHeader
{
public string UserId; // Encrypted
public string Password; // Encrypted; Just realized this field isn't necessary [thanks CJP]
public DateTime TimeStamp; // Used for calculating header Expiry
public string SecurityToken;
}
Run Code Online (Sandbox Code Playgroud)
一般的想法是每次调用都会检查SecurityHeader.如果它存在,但尚未过期,并且SecurityToken有效,则Web方法将正常进行.否则它将返回错误,或者它将尝试重新授权并生成新的SecurityHeader
SecurityToken基于UserId,Password和TimeStamp的盐渍哈希.每天更换盐以防止重放.
我看到的一个问题是用户可能有权访问Web服务A,但不能访问Web服务B.如果他调用A并收到安全令牌,就像现在一样,这意味着如果他使用B将让他通过同样的道理.我必须更改它,以便安全令牌仅在从Web服务到Web服务,而不是用户到Web服务,即.如果用户调用A调用B,则应该没有问题,但如果用户调用服务A然后调用服务D则不行.解决方法是将公共密钥(或一组密钥)分配给逻辑相关的服务.(即如果客户可以做A,那么逻辑上他也可以做B).
或者,我必须将用户的整个权限集编码为安全头的一部分.我将不得不调查开销是多少.
编辑:
有几个人提到了其他安全方案,比如WS-Security和SAML等.我已经有了.事实上,我从WS-Security那里得到了这个想法.问题是其他方案不提供我需要的功能(缓存授权信息并防止在没有中间数据库的情况下重放).如果有人知道一个方案,那么我会用它来替代它.此外,这不是关于身份验证.这是由我无法控制的另一种机制处理的.
如果事实证明无法缓存授权数据,那么这意味着我只需要承担每个级别的授权开销.
不耐烦的总结:我正在寻找关于为公共语言结构生成代码但不解析的好参考.
我对编程语言很感兴趣,并尝试尽可能多地阅读文献.但是大多数都是从功能和理论的角度来讨论这个话题,我觉得很难理解,更不用说实现这些想法了.
所以问题是; 您建议哪些资源以更加迫切和实用的方式涵盖主题的编程语言实现?
例如,我发现" Lua 5.0的实现 "论文非常有启发性.
请注意,我不是在寻找有关解析或标记的文章.
Microsoft已经提出了我正在考虑将其用于.NET 3.5应用程序的这项相当新的技术。我很好奇,有人在使用这项技术吗?我担心使用安全虚拟机会对性能产生负面影响。同样,按照Microsoft宣传产品的方式,许可集成似乎是无缝的,不需要代码中的任何开发工作。这似乎是一个很棒的产品,但我想确保在投入使用之前先了解所有陷阱。
在我们的一个项目中,我们有类似的代码.任何人都可以解释(简单英语)为什么需要修复语句?
class TestClass
{
int iMyVariable;
static void Main()
{
TestClass oTestClass = new TestClass();
unsafe
{
fixed (int* p = &oTestClasst.iMyVariable)
{
*p = 9;
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我必须在Javascript中连接一堆字符串,并且我正在寻找最快的方法.让我们假设Javascript必须创建一个大的XML文件,当然,它由许多小字符串组成.所以我提出来:
var sbuffer = [];
for (var idx=0; idx<10000; idx=idx+1) {
sbuffer.push(‘<xmltag>Data comes here... bla... </xmltag>’);
}
// Now we "send" it to the browser...
alert(sbuffer.join(”));
Run Code Online (Sandbox Code Playgroud)
不要注意循环或构建示例的其他"复杂"代码.
我的问题是:对于未知数量的字符串,您是否有更快的算法/方法/想法将许多小字符串连接到一个巨大的字符串?
我真的厌倦了这个问题.谷歌搜索似乎总是建议"删除包的所有bpls","删除所有dcus".有时这只是不行.希望我能在这里得到一些其他的想法.
我有一个内部写的包,几个月前没有问题安装.对源进行了一些更改后,我认为是时候重新编译/重新安装软件包了.现在我得到两个错误,第一个如果我选择"安装"是
模块'dcc100.dll'中地址02422108的访问冲突.读取地址00000000.
...或者,如果我尝试构建/编译包,我得到
[Pascal致命错误] F2084内部错误:LA33
这是我们许多人似乎一次又一次出现的德尔福问题之一.如果我们能够按照"任何一个或这些步骤的组合可能修复它"的方式整理响应,那将会很棒,但是如果你做了所有这些步骤,它将修复它......
目前,我已删除了对此程序包的bpl/dcp文件的所有引用,但仍然得到相同的错误...
使用BDS2006(Delphi)
2008年10月1日更新:我设法解决了这个问题 - 请参阅下面的帖子.由于我不能接受我自己的答案,我不完全确定在这里做什么.显然,对于某些人来说,这些类型的问题经常发生,所以我会暂时保持开放以获得其他建议.然后我想如果有人将所有信息整理成一个超级帖子,我可以接受答案
我相信面向对象,但还没有达到为了“符合面向对象”而使用不适当的设计/实现的程度。
那么,如何处理Serlvet/EJB/DataContainer分层架构:
这种方法很有吸引力;DataContainer 的作用很明确,并且很容易知道数据来自哪里。
除了不是面向对象之外,这还会导致业务层类不明确,难以命名和组织。
即使我们试图变得更加“面向对象”(例如,将其中一些方法放入 DataConatiners 中),其中一些操作也会对多个数据集进行操作。
如何防止业务层变得令人困惑的程序,但又不会用业务逻辑污染您的数据容器?
class UserServlet {
handleRequest() {
String id = request.get("id");
String name = request.get("name");
if (UserBizLayer.updateUserName(id,name))
response.setStatus(OK);
else
response.setStatus(BAD_REQUEST);
}
}
class UseBizLayer {
updateUserName(String id, String name) {
long key = toLong(id);
user = userDAO.find(key);
if user == null
return false;
if (!validateUserName(name))
return false;
user.setName(name);
userDAO.update(user);
return true;
}
validateUserName(String name) {
// do some validations and return
}
}
class …Run Code Online (Sandbox Code Playgroud) 我们正在使用ASP.NET和AJAX设计Web应用程序,我们希望在不同的网站上托管我们的WCF服务层,并从我们的客户端页面调用服务层.我们知道浏览器不允许对不同的端口或域进行AJAX调用.构建解决方案的最佳方法是什么?我们正在考虑将代理层与托管在同一域上的服务一起使用,该客户端具有对服务层的Web引用.有更好的解决方案吗?
.net ×2
javascript ×2
performance ×2
ajax ×1
c# ×1
charts ×1
class-design ×1
delphi ×1
graph ×1
http ×1
http-headers ×1
install ×1
join ×1
licensing ×1
oop ×1
packages ×1
security ×1
silverlight ×1
unsafe ×1
wcf ×1
wcf-routing ×1
web-services ×1