我正在考虑在我的webapp上实现经典的"记住我"复选框,以便在他返回访问我的网站后让被认证的用户"记住".
Gmail,Facebook和其他人都有这种功能,但我不太确定它有多安全.
像Spring Security这样的Java框架使用"基于哈希的令牌方法".生成的令牌(使用用户名,密码,expirationTime和privateKey)存储在客户端的Cookie令牌= 567whatever567'中.然后重新使用该令牌以在下次回来时重新验证用户.
我担心的是,即使登录过程发生在https连接下,在每个后续的http请求中,cookie都将在网络上以未加密的方式发送.
基本上每个人都可以读取令牌并重复使用它进行身份验证.
我正试图了解Gmail或Facebook如何实现此功能.我可以在FB中看到一些像'presence = DJ267619445G09H0L15228675 .....'的Cookie,其他在Gmail中.
我不太确定他们是否使用其他技巧来防止那些试图模仿其他用户的人.
我会尝试使用类似cURL的东西冒充自己,看看他们是否只使用特定的令牌来记住用户.
如果它们在我看来就像一个重大的安全问题.也许不是Facebook(我不关心它)但是如果你没有设置' 使用始终https ',将使用 Gmail 连接,它将通过互联网发送你的未加密的令牌.
你怎么看?
我还注意到Facebook用户名/密码字段在http(而不是https)下公开.在这方面,我也想知道:所有的网站都露出了用户名/密码字段而不是"不自然"的"不自然".通过http发送请求后,没有"重定向到https"可以修复"全局可见的凭据"问题.
谢谢
编辑:
我的担忧是有根据的http://codebutler.com/
感谢Firesheep创作者突出问题!
我想保存一些我的网站每月带宽分配,我想知道我是否可以使用Flickr PRO或我应该依靠Amazon S3作为我的网站图像的托管服务.(我的Web应用程序允许用户上传他们自己的图片,目前它正在管理大约40GB的数据)
我从未使用过亚马逊的服务,我喜欢使用Flickr REST Api的想法从我的webApp动态上传图像.
我也喜欢几乎无限空间在Flickr上存储图像只需25美元/年,但我不确定我是否可以在我的网站上使用他们的服务.
我认为如果我使用Flickr服务存储图像(由我的网站用户上传),我的帐户可以被禁止,这不仅仅是为了"个人使用".
您的体验是什么?您会建议其他服务而不是亚马逊的S3,或者这是目前唯一可用的选项吗?
谢谢
编辑:Flickr明确地说' 不要将Flickr用于商业目的 ',你总是可以联系他们要求评估你的请求,但听起来我觉得我不能用他们的服务来实现我想要的.S3看起来就像那样......
即使粗略估计我每个月要花的钱仍然很吓人
5000 visit/day
* 400 img/user (avg 50kB/image)
* 30 days
= ~3TB of traffic
* 0.15$/GB (Amazon S3)
= 429$/month
Run Code Online (Sandbox Code Playgroud)
有没有更便宜的地方来托管我的照片?
如果我开始在Chrome中输入stackov ..我可以看到类似'按Tab键搜索stackoverflow.com'的内容.
SO基本上被认为是搜索引擎.
您是否知道如何在我们的WebApp中实现相同类型的功能?
我认为它应该与OpenSearch相关
<link rel="search" type="application/opensearchdescription+xml" title="Stack Overflow" href="http://sstatic.net/so/opensearch.xml">
Run Code Online (Sandbox Code Playgroud)
谢谢
编辑:
我认为应该只是指定以这种方式定义的xml(http://sstatic.net/so/opensearch.xml)
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<ShortName>Stack Overflow</ShortName>
<Description>Search stackoverflow.com for answers to your programming questions</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image width="16" height="16" type="image/x-icon">http://stackoverflow.com/favicon.ico</Image>
<Url type="text/html" method="get" template="http://stackoverflow.com/search?q={searchTerms}"></Url>
</OpenSearchDescription>
Run Code Online (Sandbox Code Playgroud)
这是将使用的URL.
http://stackoverflow.com/search?q={searchTerms}
Run Code Online (Sandbox Code Playgroud)
searchTerms将填充您在chrome中输入的字符串
我有一个我要验证的表单.它包含2个地址变量.始终要验证address1,必须根据某些条件验证address2
public class MyForm {
String name;
@Valid Address address1;
Address address2;
}
public class Address {
@NotEmpty
private String street;
}
Run Code Online (Sandbox Code Playgroud)
我的控制器自动验证并绑定我的表单obj
@RequestMapping(...)
public ModelAndView edit(
@ModelAttribute("form")
@Valid
MyForm form,
BindingResult bindingResult,
...)
if(someCondition) {
VALIDATE form.address2 USING JSR 303
Run Code Online (Sandbox Code Playgroud)
问题是,如果我使用LocalValidatorFactoryBean验证器,我无法重用Spring提供的BinidingResult对象.绑定不起作用,因为'result'的目标对象是'MyForm'而不是'Address'
validate(form.getAddress2(), bindingResult) //won't work
Run Code Online (Sandbox Code Playgroud)
我想知道什么是标准/清洁方法来进行条件验证.
我正在考虑以编程方式在我的控制器中创建一个新的BindingResult.
final BindingResult bindingResultAddress2 = new BeanPropertyBindingResult(address2, "form");
validate(form.getAddress2(), bindingResultAddress2);
Run Code Online (Sandbox Code Playgroud)
但是我从bindingResultAddress2获得的错误列表无法添加到一般的'bindingResult',因为字段名称不正确('street'而不是'address2.street'),绑定将不起作用.
一些肮脏的方法是扩展BeanPropertyBindingResult以接受一些字符串附加到字段名称..你有更好的方法吗?
我有一个彩色枚举
public enum color { GREEN, WHITE, RED }
Run Code Online (Sandbox Code Playgroud)
我有包含它的MyEntity.
public class MyEntity {
private Set<Color> colors;
...
Run Code Online (Sandbox Code Playgroud)
我已经有一个UserType来映射我的枚举.
你知道如何在Hibernate hbm.xml中映射一组枚举吗?
我需要UserType还是最简单的方法?
谢谢
编辑:请注意,我正在寻找hbm.xml配置而不是@CollectionOfElements Annotation
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>ftp</id>
<phase>generate-resources</phase>
<configuration>
<tasks>
<ftp action="get"
server="${ftp.server.ip}"
userid="${ftp.server.userid}"
password="${ftp.server.password}"
remotedir="${ftp.server.remotedir}"
depends="yes" verbose="yes"
skipFailedTransfers="true"
ignoreNoncriticalErrors="true">
<fileset dir="target/test-classes/testdata">
<include name="**/*.html" />
</fileset>
</ftp>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
...
Run Code Online (Sandbox Code Playgroud)
问题是当$ {ftp.server.remotedir}文件夹不存在时,我的构建失败.
我试图指明
skipFailedTransfers="true"
ignoreNoncriticalErrors="true
Run Code Online (Sandbox Code Playgroud)
但这些并没有解决问题,而且构建仍然失败.
An Ant BuildException has occured: could not change remote directory: 550 /myBadDir: The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
您是否知道如何指示我的maven构建不关心此Ant任务错误/或如何指示Ant在丢失目录时不会失败?
编辑:
彼得的解决方案有效.
如果你有问题的话
[INFO] Error configuring: org.apache.maven.plugins:maven-antrun-plugin. Reason: java.lang.NoSuchMethodError: org.apache.tools.ant.util.FileUtils.close(Ljava/io/InputStream;)V
Run Code Online (Sandbox Code Playgroud)
只需从ant-contrib中排除ant
<dependency>
<groupId>ant-contrib</groupId>
<artifactId>ant-contrib</artifactId>
<version>${ant-contrib.ver}</version> …Run Code Online (Sandbox Code Playgroud) 我正在尝试从包含特殊字符的字符串中提取SEO友好URL,带有重音符号的字母,中文字符等等.
所以这样做并且它正在翻译这个帖子标题
java-and-seo-friendly-urls-reate--a-valid-http-url-from-a-string-composed-by-s
Run Code Online (Sandbox Code Playgroud)
我试图用Java做到这一点.
我正在使用URLEncoder.encode的这个后期解决方案将中文和其他符号转换为有效的URL字符.
你有没有实现过这样的东西?有没有更好的办法?
我认为这是多线程Java应用程序的常见场景,因此我将尝试在此处进行描述.
在我的Java App中,我有一个threadExecutor对象,它定义了一个包含5个线程的Pool.
ExecutorService threadExecutor = Executors.newFixedThreadPool(5);
Run Code Online (Sandbox Code Playgroud)
一个sendCallables方法负责作业的列表分配给执行器.
我跟踪一个带有ObjectX的List.通过这种方式,如果用户想要中断/取消线程,我可以引用Futures列表.像这样的东西:
Map<ObjectX, List<Future<String>>> map = new HashMap<ObjectX, Future<String>>();
public void sendCallables(ObjectX referenceObj, List<Callable<String>> list) {
...
List<Future<String>> futureList = new ArrayList<Future<String>>();
for(Callable<String> myCallableJob : list) {
Future<String> future = threadExecutor.submit(myCallableJob);
futureList.add(future);
}
...
map.add(referenceObj, futureList);
...
}
public void cancelFutures(ObjectX referenceObj) {
...
List<Future<String>> list = map.get(referenceObj);
for(Future<String> future : list) {
future.cancel();
}
map.remove(referenceObj);
....
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
现在有些情况下不再需要执行提交的任务了.
在这些情况下,应用程序应智能/自动地取消取消任务.
当用户会话到期时或者在执行所有作业之前特定流程(与提交的任务相关)结束时,可以在Web应用程序中找到此类情况的示例.
所以基本上我每次都需要调用cancelFutures(referenceObj),因为我的应用程序没有意义继续执行Jobs.我应该在应用程序需要调用它时识别每种情况. …
我在Java代码中应用正则表达式时遇到问题.
我的文本字符串是这样的(String myString)
name: Abc Def;
blah: 1 2 3;
second name: Ghi;
Run Code Online (Sandbox Code Playgroud)
我需要提取名称信息(Abc Def).名称可以包含1+个单词的字符串.所有属性(name,blah,second name)在开头都有一些空格
我试图使用的代码是
String patternStr = "\\s{2,}name:\\s([\\w ]*\\w+);";
Matcher matcher = Pattern.compile(patternStr).matcher(myString);
if (matcher.matches())
System.out.println(matcher.group(1));
Run Code Online (Sandbox Code Playgroud)
我的正则表达式似乎与在线工具正常工作(正则表达式:\ s {2,}名称:\ s([\ w]*\w +);)但是当我将它移植到java代码时它根本不起作用.知道我错过了什么吗?
非常感谢
编辑:如果我使用matcher.find()它工作正常.
这是关于如何使用模拟对象对Java类进行单元测试的一般问题.
我可以用这个例子总结我的问题.
假设我有一个名为MyInterface.java的接口和一个不覆盖equals()的"TwoString"对象
"TwoString.java"
private String string1;
private String string2;
public TwoString(String string1, String string2) {
this.string1 = string1;
this.string2 = string2;
}
...getters..setters..
Run Code Online (Sandbox Code Playgroud)
"MyInterface.java"
void callMe(TwoString twoString);
Run Code Online (Sandbox Code Playgroud)
然后我有"MyClass.java"对象.它的构造函数接受MyInterface的具体实现.
MyClass methodToTest()包含以某种方式创建TwoString对象的逻辑.假设它将被创建为
new TwoString("a","b")
Run Code Online (Sandbox Code Playgroud)
因此,当调用methodToTest()时,它会创建这个将传递给接口方法callMe(TwoString twoString)的TwoString对象.
我基本上想要模拟界面.使用此mock创建一个MyClass对象.然后验证是否使用TwoString的特定实例调用了mock方法.
我正在使用EasyMock,这是一些java代码
"MyClassTest.java"
public void test() throws Exception {
MyInterface myInterfaceMock = createMock(MyInterface.class);
MyClass myClass = new MyClass(myInterfaceMock);
myInterfaceMock.callMe(new TwoString("a","b")); <--- fails here
expectLastCall();
replay(myInterfaceMock);
myClass.methodToTest();
verify(myInterfaceMock);
Run Code Online (Sandbox Code Playgroud)
这就是问题所在.我期待在调用中的TwoString对象
myInterfaceMock.callMe(new TwoString("a","b"));
Run Code Online (Sandbox Code Playgroud)
与MyClass.methodToTest()中生成的不同,因为TwoString.java不会覆盖equals.
我可以跳过TwoString实例上的问题
myInterfaceMock.callMe((TwoString)anyObject());
Run Code Online (Sandbox Code Playgroud)
但我想确保使用TwoString的特定实例调用接口方法,该实例包含"a"作为string1而"b"作为string2.
在这种情况下,TwoString对象非常简单,并且很容易覆盖equals方法 - 但是如果我需要检查更复杂的对象该怎么办.
谢谢
我将尝试使用此示例使其更具可读性
public …Run Code Online (Sandbox Code Playgroud) 我有这个xml
<root>
<node1>
<node2>xxx</node2>
</node1>
...
<node1>
<node2>yyy ABC yyy</node2>
</node1>
...
<node1>
<node2>zzz</node2>
</node1>
</root>
Run Code Online (Sandbox Code Playgroud)
我想让node1具有包含文本ABC的node2 .
是否可以使用XPath实现这一目标?
我的网页使用jQuery,这些在IE和Chrome中非常快.在Firefox 3中,动画和其他脚本肯定比较慢,即使与IE6相比也是如此.我读到jQuery针对IE进行了优化.这是唯一的原因吗?你遇到类似的问题吗?谢谢
java ×8
hosting ×2
security ×2
seo ×2
amazon-s3 ×1
ant ×1
cookies ×1
dom ×1
easymock ×1
encoding ×1
enums ×1
firefox ×1
flickr ×1
ftp ×1
future ×1
hibernate ×1
https ×1
image ×1
jquery ×1
maven-2 ×1
mocking ×1
opensearch ×1
orm ×1
parsing ×1
performance ×1
regex ×1
remember-me ×1
set ×1
spring ×1
spring-mvc ×1
testing ×1
unit-testing ×1
url ×1
validation ×1
vps ×1
xml ×1
xpath ×1