Я хочу создать веб-приложение, используя Spring Security, но чувствую, что что-то не так или чего-то не хватает.
Вот мои коды:
безопасность.xml:
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<http use-expressions="true" disable-url-rewriting="true">
<intercept-url pattern="/index.htm" access="hasRole('ROLE_ADMIN')" />
<form-login login-processing-url="/login" login-page="/login.htm"
username-parameter="userName" password-parameter="password"
default-target-url="/index.htm" always-use-default-target="true"
authentication-failure-url="/login.htm?auth=fail" />
<logout logout-url="/logout.htm" logout-success-url="/login?out=1"
delete-cookies="JSESSIONID" invalidate-session="true" />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="drs" password="123456" authorities="ROLE_ADMIN" />
<user name="dr" password="123456" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
контроллер:
@Controller
public class SecurityController {
@RequestMapping(value = "/logout.htm", method = RequestMethod.GET)
public String logoutPage() {
return "logoutPage";
}
@RequestMapping(value = "/login.htm", method = RequestMethod.GET)
public String login() {
return "loginPage";
}
}
логин.jsp:
<form:form action="${pageContext.request.contextPath}/login" method="POST">
<c:if test="${not empty param.err}">
<div>
<c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}" />
</div>
</c:if>
<c:if test="${not empty param.out}">
<div>You've logged out successfully.</div>
</c:if>
<c:if test="${not empty param.time}">
<div>You've been logged out due to inactivity.</div>
</c:if>
Username:<br>
<input type="text" name="userName" value="" />
<br>
<br> Password:<br>
<input type="password" name="password" value="" />
<input value="Login" name="submit" type="submit" />
</form:form>
выход.jsp:
<a href="${pageContext.request.contextPath}/login.htm">Login</a>
Это работает просто отлично, единственная проблема заключается в том, что когда я выхожу из системы, ничего не происходит, у меня все еще есть разрешение, которое у меня было после входа в систему. Обычно он должен вернуться на экран входа в систему, запрашивая у пользователя аутентификацию для доступа к этой странице. Что мне не хватает?
И еще одна проблема, которую я не мог понять. Когда я меняю в форме входа в систему:
<form:form action="${pageContext.request.contextPath}/login" method="POST">
to:
<form name='loginform' action="<c:url value='j_spring_security_check' />" method='POST'>
Я получаю сообщение об ошибке:
Статус HTTP 404 — /Dronomy_2.1/j_spring_security_check
Может кто-нибудь помочь мне?
/logout.htm
при переходе по ссылке, вы практически никогда не выходите из системы. Для вашего свойстваlogin-processing-url
установлено значение/login
, поэтому при отправке формы вам нужно отправить ее на/login
. - person M. Deinum   schedule 16.07.2015