我有一个网站部分(/secure
URL下的所有内容),我正在尝试使用Spring Security 3.2.5进行保护。我正在使用以下XML配置:
<http use-expressions="true">
<intercept-url pattern="/secure/login" access="permitAll" />
<intercept-url pattern="/secure/**" access="isAuthenticated()" />
<form-login default-target-url="/secure/home" always-use-default-target="true" login-page="/secure/login" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="user" password="password" authorities="ROLE_SECURE" />
</user-service>
</authentication-provider>
</authentication-manager>
我正在尝试使用具有此控制器的自定义登录表单:
@Controller
@RequestMapping(value = "/secure")
public class LoginController {
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String getLogin() {
return "secure/login";
}
@RequestMapping(value = "/home", method = RequestMethod.GET)
public String getHome() {
return "secure/home";
}
}
以及登录页面中的以下代码:
<form method="POST" action="<c:url value="/secure/login" />">
username: <input type="text" name="username" /><br/>
password: <input type="password" name="password" /><br/>
<input type="submit" value="Login" />
</form>
我在web.xml
使用中加载了安全上下文,ContextLoaderListener
并且springSecurityFilterChain
还设置了委托代理过滤器。
当我尝试访问/secure
重定向到的URL时/secure/login
,该getLogin
方法中将调用我的控制器,并且看到登录页面。没关系的
现在我的问题是:无论我在登录表单中提交的内容如何都直接发送到,LoginController
并且出现异常,说明POST不是受支持的方法,这是有道理的,因为控制器中没有POST处理程序。
如果我在控制器中添加这样的方法:
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String postLogin() {
return "redirect:/secure/home";
}
我不再收到错误,但postLogin
调用了我的方法,将我发送到/secure/home
未经身份验证的地方,然后将我重定向到,然后/secure/login
回到第一个方框。
我不知道我在做什么错。我在网上看到的所有示例都是Java配置的,我不希望使用Java,并且所有工作流都在应用程序上下文中暂停,而不是在某些额外的URL路径下(对于我而言/secure
)。
我想念什么?
这篇文章帮助我获得了正确的结果:http : //codehustler.org/blog/spring-security-tutorial-form-login/
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句