2016-12-14 1 views
-2

Ich habe gelesen, über die Feder Sicherheit auch einige Beispiele gesehen, aber ich kann es nicht funktionieren lassen ... Ich bin mir nicht sicher, ob ich etwas vermisse. Bitte, ich werde eine Erklärung zu schätzen wissen, weil mir die Zeit schwer fällt, das zu verstehen.Spring Security Java-Konfiguration und Login-Formular

Verwenden von Spring mvc 4.3.3, Spring Security 4.2.0, Kacheln 3, CSS, Java 1.7, Eclipse neon.

1.- Meine erste Seite ist Login-Seite (ich verwende keine Startseite oder Index).

2.- Ich möchte Spring Security nehmen Benutzer und übergeben von meinem Login (erste Seite im Browser angezeigt), auch ich verwende <form action="<c:url value='j_spring_security_check' />" method="post"> in meinem Login, aber etwas ist falsch.

enter image description here

3.- Ich will es alle Benutzer auf die gleiche Ansicht umleiten/MyPanel (Ich werde Menü Benutzerrolle Acording ändern)

Struktur;

enter image description here

Classes (entfernt Importe und Pakete); UPDATE:

ApplicationContextConfig.java

@Configuration 
@ComponentScan("mx.com.myapp.*") 
@Import({ SecurityConfig.class }) 
public class ApplicationContextConfig { 

    @Bean(name = "viewResolver") 
    public ViewResolver getViewResolver() { 
     UrlBasedViewResolver viewResolver = new UrlBasedViewResolver(); 

     // TilesView 3 
     viewResolver.setViewClass(TilesView.class); 

     return viewResolver; 
    } 

    @Bean(name = "tilesConfigurer") 
    public TilesConfigurer getTilesConfigurer() { 
     TilesConfigurer tilesConfigurer = new TilesConfigurer(); 

     // TilesView 3 
     tilesConfigurer.setDefinitions("/WEB-INF/tiles.xml"); 

     return tilesConfigurer; 
    } 

WebMvcConfig.java:

@Configuration 
//@EnableWebMvc 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 

// @Override 
// public void addResourceHandlers(ResourceHandlerRegistry registry) { 
// 
//  // Default.. 
// } 
// 
// @Override 
// public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
//  configurer.enable(); 
// } 
    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/login").setViewName("login"); 
    } 
} 

SpringWebAppInitializer.java

public class SpringWebAppInitializer implements WebApplicationInitializer { 

    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext(); 
     appContext.register(ApplicationContextConfig.class); 

     ServletRegistration.Dynamic dispatcher = servletContext.addServlet("SpringDispatcher", 
       new DispatcherServlet(appContext)); 
     dispatcher.setLoadOnStartup(1); 
     dispatcher.addMapping("/"); 

     // UtF8 Charactor Filter. 
     FilterRegistration.Dynamic fr = servletContext.addFilter("encodingFilter", CharacterEncodingFilter.class); 

     fr.setInitParameter("encoding", "UTF-8"); 
     fr.setInitParameter("forceEncoding", "true"); 
     fr.addMappingForUrlPatterns(null, true, "/*"); 
    } 

} 

SpringSecurityInitializer.java

public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer { 

} 

SecurityConfig.java

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth.inMemoryAuthentication() 
        .withUser("mkyong").password("123456").roles("ADMIN"); 
     System.out.println("SpringSecurity ConfigureGlobal"); 
    } 

    // .csrf() is optional, enabled by default, if using WebSecurityConfigurerAdapter constructor 
// @Override 
// protected void configure(HttpSecurity http) throws Exception { 
// 
//  System.out.println("SpringSecurity configure"); 
//  http.authorizeRequests() 
//  .antMatchers("/").permitAll() 
//  .antMatchers("/myPanel**").access("hasRole('ADMIN')") 
//  .and().formLogin() 
//    .usernameParameter("username").passwordParameter("password") 
//    .permitAll() 
//  .and() 
//   .csrf(); 
// } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http.authorizeRequests().anyRequest().fullyAuthenticated().and().formLogin() 
       .loginPage("/login").failureUrl("/login?error").permitAll().and() 
       .logout().permitAll(); 
    } 

    @Override 
    public void configure(WebSecurity web) throws Exception { 
     web.ignoring().antMatchers("/path/**"); 
    } 
} 

MyController.java

@Controller 
public class MyController { 

    @RequestMapping(value = { "/" }) 
    public String loginPage(Model model) { 
     return "loginPage"; 
    } 

    @RequestMapping(value = { "/myPanel" }, method = RequestMethod.POST) 
    public ModelAndView myPanel(HttpServletRequest request, HttpServletResponse response) { 
     System.out.println("INICIA REQUEST"); 

     System.out.println("-------- " + request.getParameter("user")); 


     String message = "<br><div style='text-align:center;'>" 
       + "<h3>********** This is protected page!</h3> **********</div><br><br>"; 

     System.out.println("TERMINA REQUEST"); 
     return new ModelAndView("homePage", "message", message); 
    } 

    //Spring Security see this : 
    @RequestMapping(value = "/login", method = RequestMethod.POST) 
    public ModelAndView login(
     @RequestParam(value = "error", required = false) String error, 
     @RequestParam(value = "logout", required = false) String logout) { 

     System.out.println("/login SpringSecurity"); 

     ModelAndView model = new ModelAndView(); 
     if (error != null) { 
      model.addObject("error", "Invalid username and password!"); 
     } 

     if (logout != null) { 
      model.addObject("msg", "You've been logged out successfully."); 
     } 
     model.setViewName("homePage"); 

     return model; 
    } 
} 

login.jsp

<form action="<c:url value='/login' />" method="post"> 

       <c:if test="${not empty error}"> 
        <div class="error">${error}</div> 
       </c:if> 
       <c:if test="${not empty msg}"> 
        <div class="msg">${msg}</div> 
       </c:if> 

       <input type="text" name="username" placeholder="Username" required="required" class="input-txt" /> 
       <input type="password" name="password" placeholder="Password" required="required" class="input-txt" /> 
       <div class="login-footer"> 
        <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> 
        <strong><a href="#" class="lnk">I've forgotten something</a> | 
        <a href="#" class="lnk">Register</a></strong> 
        <button type="submit" class="btn btn--right">Sign in</button> 
       </div> 
       </form> 

Vielen Dank im Voraus.

+0

ich Sie vermuten, Ich brauche formlogin, um auf/login zu zeigen, aber ramp logging up auf Frühling Sicherheit und es wird Ihnen sagen, wo es s sucht nach login.html. – farrellmr

+0

Aber wenn ich das tue, wird es mich erneut zum Login-Recht schicken? Nach meinem Login ist meine erste Seite. : confused: – Dr3ko

Antwort

0

Ihre fehlende Erlaubnis alle auf der Login-Seite -

@Override 
protected void configure(HttpSecurity http) throws Exception { 

    System.out.println("SpringSecurity configure"); 
    http.authorizeRequests() 
    .antMatchers("/").permitAll() 
    .antMatchers("/myPanel**").access("hasRole('ADMIN')") 
    .and().formLogin() 
      .usernameParameter("username").passwordParameter("password") 
      .permitAll() 
    .and() 
     .csrf(); 
} 
+1

Hey farrellmr, immer noch 404: s – Dr3ko

-1

Es scheint, dass Ihr Setup recht ist zu kompliziert, versuchen Sie es zu vereinfachen.

Frühling Sicherheit config:

@Configuration 
    public static class WebFormSecurity extends WebSecurityConfigurerAdapter { 

     @Override 
     protected void configure(HttpSecurity http) throws Exception { 
      http.authorizeRequests().anyRequest().fullyAuthenticated().and().formLogin() 
        .loginPage("/login").failureUrl("/login?error").permitAll().and() 
        .logout().permitAll(); 
     } 
    } 

ignorieren öffentliche Mittel

@Override 
    public void configure(WebSecurity web) throws Exception { 
     web.ignoring().antMatchers("/path/**"); 
    } 

Und MVC Config, Sie haben keine Implementierung von /login Wirkung haben:

@Configuration 
public class MvcConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/login").setViewName("login"); 
    } 
} 
+1

Für einen Moment habe ich gelernt, es funktioniert aber nein ... oh mein kokoro ... könnte etwas mit meinem JSP falsch sein?

Dr3ko