스프링과 보안 프레임 워크로 애원하고 있습니다. 배우려면 앱을 개발하고 있습니다. 지금까지는 로그인 방식을 통해 사용자에게 유효성을 검사하기 위해 스프링 보안 기능이없는 응용 프로그램을 개발했습니다. 사용자가 귀하의 아이디 (사용자 이름과 비밀번호)를 검증하는 곳에서 메소드 "post"에 컨트롤러로 간다. Validator 클래스를 사용한다.앱은 봄 보안과 잘 작동하지 않습니다.
이제 나는 사용자 이름과 비밀번호를 소개한다. 보안 강화를 위해 봄 보안 기능을 도입했으나 사용자 ID (사용자 이름 및 비밀번호)를 입력하면 메소드가 리디렉션되지 않아 컨트롤러의 메소드 게시로 리디렉션되지 않습니다.
위로 다음 코드
는형태의 JSP 파일은 다음과 같습니다
...
<form:form name="f" commandName="usuario" action="j_spring_security_check" method="POST" >
<table align="center">
<tr>
<td><form:errors path="errorUsuario" cssClass="error"/></td>
</tr>
</table>
<table border="0" cellpadding="2" cellspacing="3">
<tbody>
<tr>
<td><span id="letra">Usuario</span></td>
<td><form:input path="nombreUsuario" name='j_username' id="fondo-gris"/></td>
<td><form:errors path="nombreUsuario" cssClass="error"/></td>
</tr>
<tr>
<td><span id="letra">Password</span></td>
<td><form:password path="clave" name='j_password' id="fondo-gris"/></td>
<td><form:errors path="clave" cssClass="error"/></td>
</tr>
<tr>
<td colspan="3"><center><input id="botonInciar" type="submit" name="guardar" value="Iniciar Sesión"/></center></td>
</tr>
</tbody>
</table>
</form:form>
...
이 페이지의 컨트롤러 인 :
...
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String login(Model modelo) throws Exception {
logger.info("LogginController --> login: ha entrado en el método GET");
Usuario usuario = new Usuario();
modelo.addAttribute("usuario", usuario);
logger.info("LogginController --> login: los resultados del usuario son, userName: " + usuario.getNombreUsuario());
return "index";
}
/**
* Recoge los parámetros y redireccionamos donde necesitamos
* @param usuario El usuario que intenta acceder al sistema
* @param result Resultado del acceso
* @param status Estado de lasesión
* @return Retornamos la redirección a la página donde debe de ir tras la validación
*/
@RequestMapping(value = "/index", method = RequestMethod.POST)
public String processSubmitLogin(@ModelAttribute("usuario") Usuario usuario, BindingResult result, SessionStatus status) {
logger.info("LogginController --> processSubmitLogin: ha entrado en el método POST");
UsuarioLoggin ul = new UsuarioLoggin(usuario, usuarioService);
new LogginValidator().validate(ul, result);
if (result.hasErrors()) {
return "index";
} else {
status.setComplete();
return "redirect:/ok.htm";
}
}
...
봄 보안의 구성 파일은 다음과 같습니다 securityApplicationContext.xml :
...
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/index" access="permitAll"/>
<security:intercept-url pattern="/*" access="hasAnyRole('ROLE_USER','ROLE_ADMIN')"/>
<security:form-login login-page="/index"/>
</security:http>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider>
<security:jdbc-user-service data-source-ref="dataSource"/>
</security:authentication-provider>
</security:authentication-manager>
...
PS : 테스트 및 테스트 .. 나는 보았다 라벨을 제거한 경우 : jsp 파일의 "j_spring_security_check"앱이 지금까지 발견되었지만 사용자가 데이터를 보내기 위해 푸시 할 때 앱을 종료하면 컨트롤러의 메소드 "get"에서 전체 시간입니다.
감사합니다. .