JavaConfiguration für den Frühling 4.0 + Sicherheit 3.2 + j_spring_security_check
- Erstellen einer login-Seite
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Test</title> <script src="static/js/jquery-1.10.2.min.js"></script> <script src="static/js/app-controller.js"></script> </head> <body> <div>Login</div> <form name="f" action="<c:url value="/j_spring_security_check"/>" method="POST"> <label for="password">Username</label> <input type="text" id="j_username" name="j_username"><br/> <label for="password">Password</label> <input type="password" id="j_password" name="j_password"><br/> <input type="submit" value="Validate"> <input name="reset" type="reset"> <input type="hidden" id="${_csrf.parameterName}" name="${_csrf.parameterName}" value="${_csrf.token}"/> </form> <hr/> <c:if test="${param.error != null}"> <div> Failed to login. <c:if test="${SPRING_SECURITY_LAST_EXCEPTION != null}"> Reason: <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}" /> </c:if> </div> </c:if> <hr/> <input type="button" value="Echo" id="echo" name="echo" onclick="AppController.echo();"> <div id="echoContainer"></div> </body> </html>
- Erklären WebSecurityConfigurer HIER IST, WO ich fehlte j_username UND j_password
@Configuration @EnableWebSecurity @ComponentScan(basePackages = {"com.sample.init.security"}) public class WebSecurityConfigurer extends WebSecurityConfigurerAdapter { @Inject private AuthenticationProvider authenticationProvider; @Inject public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth.authenticationProvider(authenticationProvider); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .antMatchers( "/resources/**", "/static/**", "/j_spring_security_check", "/AppController/echo.html").permitAll() .anyRequest().authenticated() .and() .formLogin() .usernameParameter("j_username") /* BY DEFAULT IS username!!! */ .passwordParameter("j_password") /* BY DEFAULT IS password!!! */ .loginProcessingUrl("/j_spring_security_check") .loginPage("/") .defaultSuccessUrl("/page") .permitAll() .and() .logout() .permitAll(); } @Override public void configure(WebSecurity web) throws Exception { web .ignoring() .antMatchers("/static/**"); } }
- Erklären WebMvcConfigurer
@EnableWebMvc @Configuration @ComponentScan(basePackages = { "com.app.controller", "com.app.service", "com.app.dao" }) public class WebMvcConfigurer extends WebMvcConfigurerAdapter { @Bean public ViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/view/"); viewResolver.setSuffix(".jsp"); return viewResolver; } @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/page").setViewName("page"); } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("static/**").addResourceLocations("static/"); } }
- Deklarieren Sie eine Sicherheits-Initialisierer
public class SecurityWebAppInitializer extends AbstractSecurityWebApplicationInitializer { }
- Deklarieren Sie eine App Initialzer
public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[]{WebSecurityConfigurer.class}; } @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[]{WebMvcConfigurer.class, DataSourceConfigurer.class}; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } }
- Umsetzung Ihrer benutzerdefinierten Authentifizierungsanbieter
@Component @ComponentScan(basePackages = {"com.app.service"}) public class CustomAuthenticationProvider implements AuthenticationProvider { private static final Logger LOG = LoggerFactory.getLogger(CustomAuthenticationProvider.class); @Inject private AppService service; @Override public Authentication authenticate(Authentication authentication) throws AuthenticationException { //Thread.dumpStack(); String username = authentication.getName(); String password = authentication.getCredentials().toString(); String message = String.format("Username: '%s' Password: '%s'", username, password); UserBean userBean = service.validate(username, password); LOG.debug(message); if (userBean != null) { List<GrantedAuthority> grantedAuths = new ArrayList<>(); grantedAuths.add(new SimpleGrantedAuthority("USER")); return new UsernamePasswordAuthenticationToken(userBean, authentication, grantedAuths); } else { String error = String.format("Invalid credentials [%s]", message); throw new BadCredentialsException(error); } } @Override public boolean supports(Class<?> authentication) { return authentication.equals(UsernamePasswordAuthenticationToken.class); } }
Ich bin skipping EchoController, AppService, AppDao und UserBean.
Dank.
was macht Ihr Authentifizierungs-parameter sieht aus wie auf Methode authentifizieren? Was sind seine Eigenschaften Werte?
Beide Anmeldeinformationen und AUFTRAGGEBER sind leer. Check-in in der firebug-Netzwerk-Konsole sind beide Parameter ausgelöst. Es sieht aus wie Sie sind irgendwann verloren. Als ich bin mit dem neuen Feder-Funktionen (Java-Konfiguration) vielleicht ist das Spring Security-Durchsuchungen für einen anderen parameter-pair-Mädchen-Namen (nicht j_username noch j_password), ich bin zu raten.
Habe ich nur noch einen controller umgehen Validierung mit einem echo-Methode, tragen Benutzernamen und Kennwort, und Sie sind leer als auch mit @RequestParam
Beide Anmeldeinformationen und AUFTRAGGEBER sind leer. Check-in in der firebug-Netzwerk-Konsole sind beide Parameter ausgelöst. Es sieht aus wie Sie sind irgendwann verloren. Als ich bin mit dem neuen Feder-Funktionen (Java-Konfiguration) vielleicht ist das Spring Security-Durchsuchungen für einen anderen parameter-pair-Mädchen-Namen (nicht j_username noch j_password), ich bin zu raten.
Habe ich nur noch einen controller umgehen Validierung mit einem echo-Methode, tragen Benutzernamen und Kennwort, und Sie sind leer als auch mit @RequestParam
InformationsquelleAutor zeh | 2013-12-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der version 3.2 post-Parameter geändert haben, von j_username zu Benutzername und j_password Passwort. Die login-url hat sich auch geändert /j_spring_security_check /login.
Finden Sie unter diesem link für die Erklärung, warum diese änderung eingeführt wurde: http://docs.spring.io/spring-security/site/docs/3.2.0.RELEASE/reference/htmlsingle/#jc-httpsecurity. Dies sind die änderungen:
GET /login macht der login-Seite statt /spring_security_login
POST /login authentifiziert sich der Benutzer anstelle von /j_spring_security_check
Dem username-parameter defaults, username statt j_username
Den Passwort-parameter-Standardeinstellungen für Passwort statt j_password
Und dies ein Beispiel für ein login-Formular: http://docs.spring.io/spring-security/site/docs/3.2.0.RELEASE/reference/htmlsingle/#jc-form
In der Tat! Ich kam gerade hier, um den code aktualisieren. Ich fand dieses hier docs.Frühling.io/spring-security/site/docs/3.2.x/apidocs/org/..., Aber wie du schon angesprochen hast, Punkt für dich, danke.
InformationsquelleAutor