其中Spring Security 4.0有所谓的Default Login Page,如下所示:

深入研究源代码,我发现了 Filter org.springframework.security.web.authentication.ui.DefaultLoginPageGenerateFilter
它呈现该登录页面。实际上,它有 private String generateLoginPageHtml(HttpServletRequest request, boolean loginError, boolean logoutSuccess)方法,其中包含以下代码片段:
if (formLoginEnabled) {
sb.append("<h3>Login with Username and Password</h3>");
sb.append("<form name='f' action='").append(request.getContextPath()).append(authenticationUrl).append("' method='POST'>\n");
sb.append(" <table>\n");
sb.append(" <tr><td>User:</td><td><input type='text' name='");
sb.append(usernameParameter).append("' value='").append("'></td></tr>\n");
sb.append(" <tr><td>Password:</td><td><input type='password' name='").append(passwordParameter).append("'/></td></tr>\n");
if (rememberMeParameter != null) {
sb.append(" <tr><td><input type='checkbox' name='").append(rememberMeParameter).append("'/></td><td>Remember me on this computer.</td></tr>\n");
}
sb.append(" <tr><td colspan='2'><input name=\"submit\" type=\"submit\" value=\"Login\"/></td></tr>\n");
renderHiddenInputs(sb, request);
sb.append(" </table>\n");
sb.append("</form>");
}
Run Code Online (Sandbox Code Playgroud)
问题是我想从过滤器链中删除该过滤器,以便自定义由 url 定位的登录页面http://my-domain/login。是否可以?
我的安全配置:
<http auto-config="true"> …Run Code Online (Sandbox Code Playgroud) 我在Java 7,我有以下枚举:
public enum BooleanEnum implements StringRepresentable{
YES {
@Override
public String getStringRepresentation() {
return "true";
}
},
NO {
@Override
public String getStringRepresentation() {
return "false";
}
};
public abstract String getStringRepresentation();
}
Run Code Online (Sandbox Code Playgroud)
现在我有了方法:
List<StringRepresentable> getValues(){
return Arrays.asList(BooleanEnum.values()); //Type mismatch:
//cannot convert from List<BooleanEnum> to List<StringRepresentable>
}
Run Code Online (Sandbox Code Playgroud)
这有什么问题enum?它实现了接口,因此代码应该编译得很好.
我正在阅读 spring 框架文档,现在我在应用程序范围概念。关于这个概念的文档是这样说的:
这有点类似于 Spring 单例 bean,但在两个重要方面有所不同: 它是每个 ServletContext 的单例,而不是每个 Spring ApplicationContext
对我来说,不清楚的是我们如何想象 Spring 应用程序上下文和 Servlet 上下文之间的关系。
我假设它们之间的关系有两种可能的情况:
一世

二

那么,Spring 应用程序上下文与 Servlet 上下文是如何关联的呢?是情况I还是情况II或两者都不是?
我有以下代码:
try {
//do some
} catch (NumberFormatException e) {
return DynamicFilterErrorCode.INVALID_VALUE;
} catch (ClassCastException e) {
return DynamicFilterErrorCode.INVALID_VALUE;
} catch (IllegaleArgumentException e) {
return DynamicFilterErrorCode.INVALID_VALUE;
}
Run Code Online (Sandbox Code Playgroud)
是否可以将这3个catch子句合并为一个?它们具有完全相同的处理程序代码,因此我想重用它.
问题出在标题中.我使用HashMap如下:
Map<Player, Partner> m = new HashMap<Player, Partner>();
//do some on m
Run Code Online (Sandbox Code Playgroud)
如果双方Player和Partner只是一个POJO代表数据模型.
public class Player{
private int id;
private String name;
//etc, GET, SET
}
public class Partner{
private int id;
private String name;
//etc, GET, SET
}
Run Code Online (Sandbox Code Playgroud)
我想说这些类的两个对象是相同的,如果它们具有相同的id.所以,我应该hashCode写点什么
public int hashCode(){
return id;
}
Run Code Online (Sandbox Code Playgroud)
这是一种正确的方法吗?为什么我要在使用HashMap或类似的东西时使用它?
这个话题几乎就是问题的标题.我在Meyrses的书"Effective C++"中看到了这个:
C++按值返回对象的事实
这意味着什么以及C++标准如何支持该消息?对于实例,请说我们有这样的事情:
int foo()
{
int a = 1;
return a;
}
Run Code Online (Sandbox Code Playgroud)
这很清楚,这个短语意味着我们返回存储在局部变量中的值的副本.但考虑一下:
int& foo()
{
int a = 1;
return a;
}
Run Code Online (Sandbox Code Playgroud)
编译器应警告我们返回对局部变量的引用.那个"按价值回归的事实"如何适用于这个例子?
我有以下内容:
public void method(){
try {
methodThrowingIllegalArgumentException();
return;
} catch (IllegalArgumentException e) {
anotherMethodThrowingIllegalArgumentException();
return;
} catch (IllegalArgumentException eee){ //1
//do some
return;
} catch (SomeAnotherException ee) {
return;
}
}
Run Code Online (Sandbox Code Playgroud)
Java不允许我们两次捕获异常,因此我们得到了compile-rime错误//1.但我需要完成我尝试做的事情:
首先尝试该methodThrowingIllegalArgumentException()方法,如果失败IAE,尝试anotherMethodThrowingIllegalArgumentException();,如果失败IAE,请做一些并返回.如果失败而SomeAnotherException只返回.
我怎样才能做到这一点?
我不太明白我可以在哪里抛出这个异常.
例如,我正在实现Future<T>接口,并且不希望任何人调用该方法:
那么,我可以扔掉UnsupportedOperationException吗?
public T get(long timeout, TimeUnit unit){
throw new UnsupportedOperationException();
}
Run Code Online (Sandbox Code Playgroud)
事情是该方法的规范没有说什么关于抛出异常.反过来,例外
抛出以指示不支持所请求的操作.
Class UnsupportedOperationException
我的意思是,如果您不希望它被调用或者它可能被认为是不正确的,因为并非所有方法都已实现,它是否常见?在我的具体情况下,我认为调用该方法没有意义......
我试着通过编写以下代码来重现ConcurrentModificationException:
List<String> last = new ArrayList<>();
last.add("a");
last.add("b");
for(String i : last){
System.out.println(i);
last.remove(i);
}
System.out.println(last);
Run Code Online (Sandbox Code Playgroud)
既然,提到的文件ArrayList
请注意,迭代器的故障快速行为无法得到保证,因为一般来说,在存在不同步的并发修改时,不可能做出任何硬性保证.
我预计在单线程程序中,这种检测是直截了当的.但程序打印出来了
a
[b]
Run Code Online (Sandbox Code Playgroud)
代替.为什么?
我正在阅读B. Goetz Java Concurrency In Practice,现在我正处于关于线程安全集合的部分.他描述了可能抛出的所谓"隐藏的迭代器" ConcurrentModificationException.以下是他发布的例子:
public class HiddenIterator{
@GuardedBy("this")
private final Set<Integer> set = new HashSet<Integer>();
public synchronized void add(Integer i){ set.add(i); }
public synchronized void remove(Integer i){ set.remove(i); }
public void addTenThings(){
Random r = new Random();
for(int i = 0; i < 10; i++)
add(r.nextInt());
System.out.println("DEBUG: added ten elements to set " + set)
}
}
Run Code Online (Sandbox Code Playgroud)
现在,显然addTenThings()可能ConcurrentModificationException因为打印set的内容涉及迭代而抛出.但他提出以下建议来处理它:
如果HiddenIterator使用synchronizedSet包装HashSet,封装同步,则不会发生此类错误.
我不太明白.即使我们包装set成同步包装器,该类仍将保留NotThreadSafe.他的意思是什么?