0

我的 spring mvc 应用程序使用以下 url

http://xyz.com/<war name>/springmvc/login

我已经更新了我的 web.xml

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/springmvc/*</url-pattern>
</filter-mapping>

我更新了spring security xml文件如下

<http access-decision-manager-ref="accessDecisionManager" auto-config="true">
    <intercept-url pattern="/springmvc/welcome*" access="ADMIN" />
    <form-login login-page="/springmvc/login" default-target-url="/springmvc/welcome"
        authentication-failure-url="/springmvc/loginfailed" />
    <logout logout-success-url="/springmvc/logout" />
    <remember-me data-source-ref="dataSource"/>
</http>

如果我输入 springmvc/login 或 springmvc/welcome 它会进入登录页面。但是当我输入用户名和密码时,我得到一个 404。网址更改为http://xyz.com/UserInterface/springmvc/j_spring_security_check。我希望根据下面的控制器看到 hello.jsp

我的登录控制器如下

@RequestMapping(value="/welcome", method = RequestMethod.GET)
public String printWelcome(ModelMap model) {
    User user = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
    String name = user.getUsername();

    model.addAttribute("username", name);
    model.addAttribute("message", "Spring Security login + database example");

    //logical view name 
    return "hello";
}
4

1 回答 1

0

form-login 的默认 login-processing-url 属性值为 /j_spring_security_check。即登录表单将发布到此网址。
如果您的上下文根是 UserInterface ,则默认 url 将是http://xyz.com/UserInterface/j_spring_security_check,但是您将创建 url 为http://xyz.com/UserInterface/springmvc/j_spring_security_check哪个 spring-security 不能去理解。

你有两个选择

  1. 将 springSecurityFilterChain url 模式从 /springmvc/* 更改为 /*,并确保您的自定义登录表单具有 //j_spring_security_check 的操作
  2. 在 form-login 中添加自定义 login-processing-url 路径
于 2013-09-23T04:46:05.690 回答