Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java配置的Spring安全性注销_Spring_Jsp_Spring Mvc_Spring Security - Fatal编程技术网

使用Java配置的Spring安全性注销

使用Java配置的Spring安全性注销,spring,jsp,spring-mvc,spring-security,Spring,Jsp,Spring Mvc,Spring Security,我正在使用SpringSecurity 4.0.2.RELEASE和Spring4.2.0.RELEASE 我无法创建注销链接(我知道href属性的值必须是多少) 考虑: 使用WebApplicationInitializer在Java中配置DelegatingFilterProxy: public class SecurityWebInitializer extends AbstractSecurityWebApplicationInitializer { } 为Spring MV

我正在使用SpringSecurity 4.0.2.RELEASE和Spring4.2.0.RELEASE

我无法创建注销链接(我知道href属性的值必须是多少)

考虑:

使用WebApplicationInitializer在Java中配置DelegatingFilterProxy

public class SecurityWebInitializer
    extends AbstractSecurityWebApplicationInitializer {

}
为Spring MVC启用web安全的简单配置类

控制器:

registerForm.jsp:


名字:
姓氏:
用户名:
密码:
提交registerForm.jsp后,向用户显示profile.jsp

profile.jsp:


你好,世界!
服务器上的时间为${serverTime}

你的个人资料 名字: 姓氏: 用户名:
当我击中

我被重定向到登录页面。登录并提交表单后,会显示profile.jsp,其中我包含了一个注销链接。点击该按钮,HTTP404出现

我已经通过了,但是他们已经考虑到了thymeleaf。我的页面是一个简单的JSP页面

此外,我也考虑过这一点,

默认情况下,注销url需要POST请求。表演 根据您需要的GET请求注销:

http .logout() .logoutRequestMatcher(新的AntPathRequestMatcher(“/logout”)

:


有什么建议吗?

将profile.jsp中的代码更新为

<h1><a href="#" onclick="javascript:logoutForm.submit();">logout</a></h1>

        <c:url var="logoutUrl" value="/logout" />
        <form action="${logoutUrl}" method="post" id="logoutForm">
            <input type="hidden" name="${_csrf.parameterName}"
                value="${_csrf.token}" />
        </form>


虽然这个答案是正确的,但您可以详细说明为什么要这样做,并指向参考指南的相关章节。另外,链接错误,应该是
/logout
@Balwinder:不,没有帮助。我得到了HTTP状态404-/web/j_-spring_-security_logout@ShirgillAnsariurl链接错误。刚刚编辑了我的答案。@ShirgillAnsari您现在的错误是什么?@BalwinderSingh:非常感谢。再次感谢您。
/logout
作为URL或表单中的操作仅在应用程序部署为root时有效。您需要包括
上下文根目录
。对
使用URL标记应该可以做到这一点。@Denium:你是说web/spitter/logout。如果
/web/spitter
是你的应用程序的上下文根是,否则否。。。如上所述,请使用URL标记,它可以为您实现这一点。(答案基本正确,但包含错误的URL)。@Deinum:谢谢Denium。没有必要包含上下文根,因为默认情况下会考虑它。
@Controller
@RequestMapping(value = "/spitter")
public class SpittrController {

    private SpittleRepository spittleRepository;

    @Autowired
    public SpittrController(SpittleRepository spittleRepository) {

        this.spittleRepository = spittleRepository;
    }

    @RequestMapping(value = "/register", method = RequestMethod.GET)
    public String showRegistrationForm() {

        return "registerForm";
    }

    @RequestMapping(value = "/register", method = RequestMethod.POST)
    public String processingRegistration(@Valid Spitter spitter, Errors errors) {

        if (errors.hasErrors()) {
            return "registerForm";
        }

        spittleRepository.save(spitter);
        return "redirect:/spitter/" + spitter.getUserName();

    }

    @RequestMapping(value = "/{username}", method = RequestMethod.GET)
    public String showSpitterProfile(@PathVariable("username") String username,
                                     Model model) {

        Spitter spitter = spittleRepository.findByUsername(username);
        if(spitter != null){
            model.addAttribute(spitter);
        }

        return "profile";
    }
}
<form method="post">
        <table>
            <tr>
                <td>First Name:</td>
                <td><input type="text" name="firstName" /></td>
            </tr>
            <tr>
                <td>Last Name:</td>
                <td><input type="text" name="lastName" /></td>
            </tr>
            <tr>
                <td>User Name:</td>
                <td><input type="text" name="userName" /></td>
            </tr>
            <tr>
                <td>Password:</td>
                <td><input type="password" name="password" /></td>
            </tr>
            <tr>

                <td><input type="submit" value="Register" /></td>
            </tr>
        </table>
        <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}">
    </form>
<body>
    <h1>Hello world!</h1>

    <p>The time on the server is ${serverTime}.</p>

    <h1>Your Profile</h1>
    <h1><a href="/logout">Logout</a></h1>


    <table>
        <tr>
            <td>First Name:</td>
            <td><c:out value="${spitter.firstName}" /></td>
        </tr>
        <tr>
            <td>Last Name:</td>
            <td><c:out value="${spitter.lastName}" /></td>
        </tr>
        <tr>
            <td>User Name:</td>
            <td><c:out value="${spitter.userName}" /></td>
        </tr>
    </table>    
</body>
<h1><a href="#" onclick="javascript:logoutForm.submit();">logout</a></h1>

        <c:url var="logoutUrl" value="/logout" />
        <form action="${logoutUrl}" method="post" id="logoutForm">
            <input type="hidden" name="${_csrf.parameterName}"
                value="${_csrf.token}" />
        </form>