Wyświetlanie komunikatu po nieudanej próbie logowania.

0

Witam. Mam problem z wyświetlaniem komunikatu o błędnym logowaniu do systemu. Jest to aplikacja napisana w Spring z użyciem Spring Security.

Metoda w kontrolerze:

	@RequestMapping("/login")
	public ModelAndView getLoginForm(
			@RequestParam(value="authfailed", required = false) String authfailed,
			@RequestParam(value="logout", required = false) String logout,
			@RequestParam(value="denied", required = false) String denied) {
		ModelAndView mav = new ModelAndView();
		if (authfailed != null) {
			mav.addObject("authfailed", "Błędna nazwa użytkownika lub hasło");
		} else if (logout != null) {
			mav.addObject("logout", "Wylogowano");
		} else if (denied != null) {
			mav.addObject("denied", "Odmowa dostępu");
		}
		mav.setViewName("login");
		return mav;
	} 

Konfiguracja Spring Security:

	<security:http>
		<security:intercept-url pattern="/client**"
			access="ROLE_CLIENT" />
		<security:intercept-url pattern="/admin**"
			access="ROLE_ADMIN" />
		<security:form-login login-page='/login'
			username-parameter="username" password-parameter="password"
			authentication-failure-url="/login?authfailed"
			authentication-success-handler-ref="myAuthenticationSuccessHandler" />
		<security:logout logout-success-url="/login?logout" />
	</security:http> 

Strona z formularzem logowania:

	<#if authfailed??>
		<div class="errorMessage">${authfailed}</div>
	</#if>
	<div id="login">
		<h1>Logowanie</h1>
		<form method="post" action="<@spring.url '/j_spring_security_check' />">
			<input type="text" name="username" placeholder="Login" /> <input
				type="password" name="password" placeholder="Hasło" /> <input
				type="submit" value="Login" />
		</form>
	</div> 

Wszystko działa, ok jak się zaloguje to przenosi mnie na odpowiednią stronę, ale kiedy wprowadzę błędne dane to fakt w adresie pojawia się adres

http://localhost:8181/ibank/login?authfailed 

ale nie wyświetla się żaden komunikat. Przecież dodawany jest komunikat do zmiennej authfailed, ale nic nie jest wyświetlane. Starałem się wzorować na tym: http://www.mkyong.com/spring-security/spring-security-custom-login-form-annotation-example/ a tam wszystko działa poprawnie.

1

Najpierw upewnij się, że w controllerze jest wszystko ok. Tak na szybko można zrobić po prostu (tak wiem bardziej poprawne byłoby użycie jakiegoś logger):

 
System.out.pritnln("\n\n authfailed is null: " + (authfield==null))

Lub zrób sobie inny prosty test:

 
    <div id="login">
        <h1>Logowanie</h1>
        <form method="post" action="<@spring.url '/j_spring_security_check' />">
            <input type="text" name="username" placeholder="Login" /> <input
                type="password" name="password" placeholder="Hasło" /> <input
                type="submit" value="Login" />
        </form>
    </div> 

        <div class="errorMessage">${authfailed}</div>

Na początku będziesz miał prawdopodobnie freemarker error, ale po zalogowaniu z błędnymi danymi już powinno go nie być.

0

Poradziłem sobie z tym w inny sposób, ale dzięki za próbę pomocy.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.