Spring-从 2.0.4 到 4.2.0 的安全迁移
Spring-Security migration from 2.0.4 to 4.2.0
我有一个应用程序 运行 spring-安全版本 2.0.4,现在我需要将其更改为版本 4.2.0...
我用这个示例创建登录页面:
http://facestutorials.icefaces.org/tutorial/spring-security-basic.html
springSecurityLogin.jspx
<?xml version="1.0" encoding="ISO-8859-1" ?>
<f:view xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ice="http://www.icesoft.com/icefaces/component">
<ice:outputDeclaration doctypeRoot="HTML"
doctypePublic="-//W3C//DTD HTML 4.01 Transitional//EN"
doctypeSystem="http://www.w3.org/TR/html4/loose.dtd"/>
<html>
<head>
<title>Spring Security Login</title>
</head>
<body>
<ice:form partialSubmit="false">
<ice:panelGrid columns="2">
<ice:outputLabel value="User Name" for="j_username"/>
<ice:inputText id="j_username"
value="#{loginBean.userId}" size="40"
maxlength="80"/>
<ice:outputLabel value="Password" for="j_password"/>
<ice:inputSecret id="j_password"
value="#{loginBean.password}" size="40"
maxlength="80"/>
</ice:panelGrid>
<ice:commandButton actionListener="#{loginBean.login}" value="Login"/>
<ice:messages style="color: red;"/>
</ice:form>
</body>
</html>
</f:view>
我的登录方法:
public void login(ActionEvent e) throws java.io.IOException {
FacesContext.getCurrentInstance().getExternalContext().redirect("/spring-authentication/j_spring_security_check?j_username=" + userId + "&j_password=" + password);
}
那是工作...但是当我将 spring 安全版本更改为 4.2.0 时,我在尝试登录时收到 http 错误 404。
有人知道发生了什么事吗?
问题如下...
spring-security allow authentication http call with GET or POST, 迁移后,默认情况下它只允许 POST 调用。
要解决它,只需在 AuthenticationFilter
中插入以下行:
UsernamePasswordAuthenticationFilter.setPostOnly(false);
这解决了问题。
我有一个应用程序 运行 spring-安全版本 2.0.4,现在我需要将其更改为版本 4.2.0...
我用这个示例创建登录页面:
http://facestutorials.icefaces.org/tutorial/spring-security-basic.html
springSecurityLogin.jspx
<?xml version="1.0" encoding="ISO-8859-1" ?>
<f:view xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ice="http://www.icesoft.com/icefaces/component">
<ice:outputDeclaration doctypeRoot="HTML"
doctypePublic="-//W3C//DTD HTML 4.01 Transitional//EN"
doctypeSystem="http://www.w3.org/TR/html4/loose.dtd"/>
<html>
<head>
<title>Spring Security Login</title>
</head>
<body>
<ice:form partialSubmit="false">
<ice:panelGrid columns="2">
<ice:outputLabel value="User Name" for="j_username"/>
<ice:inputText id="j_username"
value="#{loginBean.userId}" size="40"
maxlength="80"/>
<ice:outputLabel value="Password" for="j_password"/>
<ice:inputSecret id="j_password"
value="#{loginBean.password}" size="40"
maxlength="80"/>
</ice:panelGrid>
<ice:commandButton actionListener="#{loginBean.login}" value="Login"/>
<ice:messages style="color: red;"/>
</ice:form>
</body>
</html>
</f:view>
我的登录方法:
public void login(ActionEvent e) throws java.io.IOException {
FacesContext.getCurrentInstance().getExternalContext().redirect("/spring-authentication/j_spring_security_check?j_username=" + userId + "&j_password=" + password);
}
那是工作...但是当我将 spring 安全版本更改为 4.2.0 时,我在尝试登录时收到 http 错误 404。
有人知道发生了什么事吗?
问题如下...
spring-security allow authentication http call with GET or POST, 迁移后,默认情况下它只允许 POST 调用。
要解决它,只需在 AuthenticationFilter
中插入以下行:
UsernamePasswordAuthenticationFilter.setPostOnly(false);
这解决了问题。