我必须使用Spring Security为我的项目创建一个登录模块,我已覆盖configure(HttpSecurity http)
的{{1}}方法,并创建了一个自定义登录页面。
WebSecurityConfigurerAdapter
:
customLogin.jsp
这是我的配置方法:
<body>
<h3>Login Here</h3>
<font color="red">
${SPRING_SECURITY_LAST_EXCEPTION.message}
</font>
<form action="<%=request.getContextPath()%>/appLogin" method="POST">
Enter UserName: <input type="text" name="app_username"/><br/><br/>
Enter Password: <input type="password" name="app_password"/> <br/><br/>
<input type="submit" value="Login"/>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
</form>
<body>
在我有注销按钮的地方,我已经包含以下代码(因为Spring Security会自动启用CSRF,它会自动禁用@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().
antMatchers("/secure/**").access("hasRole('ROLE_ADMIN')").
and().formLogin(). // login configuration
loginPage("/customLogin.jsp").
loginProcessingUrl("/appLogin").
usernameParameter("app_username").
passwordParameter("app_password").
defaultSuccessUrl("/secure/home").
and().logout(). // logout configuration
logoutUrl("/appLogout").
logoutSuccessUrl("/customLogin.jsp");
}
注销):
GET
当我点击退出按钮时,它会将我重定向到自定义登录页面,但是没有显示默认的注销消息。我怎么能在这里得到这个消息?
答案 0 :(得分:2)
使用JSP为我们当前配置实现的示例登录页面如下所示:
[..]
<c:url value="/login" var="loginUrl"/> <form action="${loginUrl}" method="post"> 1 <c:if test="${param.error != null}"> 2 <p> Invalid username and password. </p> </c:if> <c:if test="${param.logout != null}"> 3 <p> You have been logged out. </p> </c:if> <p> <label for="username">Username</label> <input type="text" id="username" name="username"/> 4 </p> <p> <label for="password">Password</label> <input type="password" id="password" name="password"/> 5 </p> <input type="hidden" 6 name="${_csrf.parameterName}" value="${_csrf.token}"/> <button type="submit" class="btn">Log in</button> </form>
1
/login
URL的POST将尝试对用户进行身份验证 2如果查询参数error
存在,则尝试进行身份验证并失败 3如果查询参数logout
存在,则表示用户已成功注销
此外,您还需要向logout
添加查询参数logoutSuccessUrl
。
您修改的Java配置是:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().
antMatchers("/secure/**").access("hasRole('ROLE_ADMIN')").
and().formLogin(). // login configuration
loginPage("/customLogin.jsp").
loginProcessingUrl("/appLogin").
usernameParameter("app_username").
passwordParameter("app_password").
defaultSuccessUrl("/secure/home").
and().logout(). // logout configuration
logoutUrl("/appLogout").
logoutSuccessUrl("/customLogin.jsp?logout");
}
答案 1 :(得分:0)
添加到您的customLogin.jsp
页面:
<div th:if="${param.logout}" class="alert alert-success">Logged out Sucessfully!</div>
答案 2 :(得分:0)
<!-- logout message --> <div th:if="${param.logout}"> <div class="alert alert-info">You have been logged out.</div> </div>
你可以使用它。