2016-12-14 9 views
-2

私は春のセキュリティについても読んだことがありますが、いくつかの例がありますが、動作させることはできません...私は何か不足しているか分かりません。私はこれを理解するのに苦労しているので、いくつかの説明に感謝します。スプリングセキュリティのJava設定とログインフォーム

Spring mvc 4.3.3、Spring Security 4.2.0、Tiles 3、CSS、Java 1.7、Eclipseネオンの使用。

1.-私の最初のページはログインページです(私はホームページやインデックスを使用しません)。

2.-私はSpring Securityにログインして(ブラウザに表示された最初のページ)ユーザーを受け取り、ログインに<form action="<c:url value='j_spring_security_check' />" method="post">を使用しますが、何か問題があります。私はそれがすべてのユーザーに同じビューにリダイレクトしたい

enter image description here

3.-は/ myPanelは

構造(Iは、ユーザーの役割た内容に応じて、メニューを変更します)。

enter image description here

クラス(除去輸入パッケージ)。 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> 

感謝します。すべてのログインページ

+0

私はあなたを疑います/ loginを指し示すためにformloginが必要ですが、春のセキュリティーのログを記録すると、どこにそれがあるのか​​がわかりますlogin.htmlを探しています。 – farrellmr

+0

もし私がそれをすれば、それはログイン権に私を再送するでしょうか?私のログインはすべて私の最初のページです。 :混乱している: – Dr3ko

答えて

0

あなたの行方不明の許可 - それはあなたのセットアップはかなりオーバー複雑ようです

@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

まだまだ404:s – Dr3ko

-1

、それを単純化してみてください。

春のセキュリティ設定:

@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(); 
     } 
    } 

は、公共資源

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

そしてMVCの設定を無視し、あなたは/loginアクションの実装を持っている必要はありません。

@Configuration 
public class MvcConfig extends WebMvcConfigurerAdapter { 

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

私はそれがうまくいっていたが、いやいや...私のココロ...私のJSPで何かが間違っている可能性がありますか?

Dr3ko

関連する問題