通过向spring saml样本添加控制器接收404错误

时间:2014-08-20 19:33:44

标签: java spring jsp spring-mvc spring-saml

我的目标是在页面上有一个链接,将用户返回到原始站点。我从spring saml示例http://projects.spring.io/spring-security-saml/开始,并在索引页面添加一个新函数。

我的saml-servlet.xml和securityContext.xml都有

<context:component-scan base-package="com.home.saml.sp"/>

我的returnController.java包com.home.saml.sp

@Controller
public class ReturnController {

    @RequestMapping(value = "/redirect", method = RequestMethod.POST)
    public String redirect() {
        String redirectUrl = "http://www.home.com";
        return "redirect:"+ redirectUrl; 
    }
}

我的index.jsp添加了

<form method="POST" action="/redirect">
    <table>
        <tr>
            <td><input type="submit" value="Redirect * Page" /></td>
        </tr>
    </table>
</form>

1 个答案:

答案 0 :(得分:0)

saml servlet处理URL /saml/web/*,因此会跳过/redirect控制器。您需要将web.xml中的saml servlet映射更改为:

<servlet-mapping>
    <servlet-name>saml</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

请注意,这将破坏示例应用程序中的元数据管理UI。您需要使用以下命令替换admin UI的当前安全性:

<!-- Security for the administration UI -->
<security:http pattern="/metadata/**" access-denied-page="/metadata/login">
    <security:form-login login-processing-url="/metadata/login_check" login-page="/metadata/login" default-target-url="/metadata"/>
    <security:intercept-url pattern="/metadata/login" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
    <security:intercept-url pattern="/metadata/**" access="ROLE_ADMIN"/>
    <security:custom-filter before="FIRST" ref="metadataGeneratorFilter"/>
</security:http>

然后删除JSP中的所有/saml/web前缀,并在adminLogin.jsp中更改/metadata/login_check以使用loginForm