2017-01-01 11 views
-1

私はgoogleとstackoverflowで検索しましたが、私は成功しませんでした。スプリングセキュリティを設定する際の問題4

私はWebアプリケーションで春のセキュリティを設定しようとしています。私は桟橋およびこれらの春バージョン使用して、組み込みだ:

  • 春のアプリケーションフレームワーク4.3.5
  • 春のセキュリティ4.2.1
  • タイル3

を私は次のセキュリティ設定を書いた(A非常にシンプルなもの)

@Configuration 
@EnableWebSecurity 
public class WebSecurityCfg extends WebSecurityConfigurerAdapter 
{ 
    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception 
    { 
     auth.inMemoryAuthentication().withUser("admin").password("123456").roles("ADMIN"); 
    } 

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

     http 
     .authorizeRequests() 
     .antMatchers("/adminWebTheme/**") 
     .permitAll() 
     .antMatchers("/pages/**") 
     .access("hasRole('ADMIN')") 
     .and() 
     .formLogin() 
     .loginPage("/pages/loginPage") 
     .permitAll() 
     .usernameParameter("username") 
     .passwordParameter("password") 
     .defaultSuccessUrl("/pages/adminHome") 
     .failureUrl("/pages/loginPage?error=true") 
     .and() 
     .logout() 
     .permitAll() 
     .logoutSuccessUrl("/pages/loginPage?logout=true") 
     .and() 
     .csrf(); 

    } 
} 

これは私のセキュリティ初期化子

です
public class WebSecurityInitializer extends AbstractSecurityWebApplicationInitializer 
{ 

} 

基本的に私のカスタムログインフォームを使用したいと思います。 これは私のログインJSP体である:それはすべて正しいように思える

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%> 
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%> 
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ page language="java" contentType="text/html; charset=UTF-8" 
    pageEncoding="UTF-8"%> 
<tiles:insertDefinition name="loginPageTemplate"> 
    <tiles:putAttribute name="head"> 
     <title><spring:message code="comm.server.login.page.title" /></title> 
    </tiles:putAttribute> 
    <tiles:putAttribute name="body"> 
     <div class="container"> 
      <div class="row"> 
       <div class="col-md-4 col-md-offset-4"> 
        <div class="login-panel panel panel-default"> 
         <div class="panel-heading"> 
          <h3 class="panel-title"><spring:message code="comm.server.login.msg" /></h3> 
         </div> 
         <div class="panel-body"> 
          <c:if test="${not empty param.error && param.error }"> 
           <div class="alert alert-error">  
            <spring:message code="comm.server.login.error.msg" /> 
           </div> 
          </c:if> 
          <c:if test="${not empty param.logout && param.logout }"> 
           <div class="alert alert-succes">  
            <spring:message code="comm.server.login.logout.msg" /> 
           </div> 
          </c:if>  
          <form role="form" method="post" action='<spring:url value="/login" />'> 
           <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>. 
           <fieldset> 
            <div class="input-group input-sm"> 
             <label class="input-group-addon" for="username"><i class="fa fa-user"></i></label> 
             <input class="form-control" placeholder='<spring:message code="comm.server.login.username.placeholder" />' name="username" id="username" 
              type="text" autofocus> 
            </div> 
            <div class="input-group input-sm"> 
             <label class="input-group-addon" for="password"><i class="fa fa-lock"></i></label> 
             <input class="form-control" placeholder='<spring:message code="comm.server.login.password.placeholder" />' 
              name="password" id="password" type="password" value=""> 
            </div> 
            <div class="checkbox"> 
             <label> <input name="remember" id="remember" type="checkbox" 
              value='<spring:message code="comm.server.login.rememberme" />'><spring:message code="comm.server.login.rememberme" /> 
             </label> 
            </div> 
            <!-- Change this to a button or input when using this as a form --> 
            <!-- <a href="index.html" class="btn btn-lg btn-success btn-block">Login</a> --> 
            <button id="accedi" name="accedi" class="btn btn-lg btn-success btn-block"><spring:message code="comm.server.login.button" /></button> 
           </fieldset> 
          </form> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </tiles:putAttribute> 
</tiles:insertDefinition> 

前のコードから。私はログインページへのアクセスを試み、私はページにうまくアクセスできます。 今私は、問題の2種類があります:私は、ページにアクセスしようとすると、私は私のログインページでユーザー名とパスワードを入れた場合は... /ページ/ adminHomeログインページが

  • を示していない

    1. を、それは、ログインURLが、それはようなものだ以前の動作では

  • を発見されなかった私に語ったので、失敗した「/ログイン」のURLに提出するには、スプリングに関するセキュリティがすべてで呼び出されていないと私はreasongを理解することはできませんです とき私は私のアプリケーションを開始私は、次のログを参照してください:

    2017-01-01 12:11:47,470 5469 [main] INFO org.apache.tiles.access.TilesAccess - Publishing TilesContext for context: org.springframework.web.servlet.view.tiles3.SpringWildcardServletTilesApplicationContext 
    2017-01-01 12:11:47,522 5521 [main] DEBUG o.s.s.c.a.a.c.AuthenticationConfiguration$EnableGlobalAuthenticationAutowiredConfigurer - Eagerly initializing {webSecurityCfg=it.eng.tz.comm[email protected]16a49a5d} 
    2017-01-01 12:11:47,679 5678 [main] DEBUG o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - Adding web access control expression 'permitAll', for ExactUrl [processUrl='/pages/loginPage?error=true'] 
    2017-01-01 12:11:47,680 5679 [main] DEBUG o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - Adding web access control expression 'permitAll', for ExactUrl [processUrl='/pages/loginPage'] 
    2017-01-01 12:11:47,681 5680 [main] DEBUG o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - Adding web access control expression 'permitAll', for ExactUrl [processUrl='/pages/loginPage'] 
    2017-01-01 12:11:47,682 5681 [main] DEBUG o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - Adding web access control expression 'permitAll', for Ant [pattern='/logout', POST] 
    2017-01-01 12:11:47,682 5681 [main] DEBUG o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - Adding web access control expression 'permitAll', for ExactUrl [processUrl='/pages/loginPage?logout=true'] 
    2017-01-01 12:11:47,682 5681 [main] DEBUG o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - Adding web access control expression 'permitAll', for Ant [pattern='/adminWebTheme/**'] 
    2017-01-01 12:11:47,683 5682 [main] DEBUG o.s.s.w.a.e.ExpressionBasedFilterInvocationSecurityMetadataSource - Adding web access control expression 'hasRole('ADMIN')', for Ant [pattern='/pages/**'] 
    2017-01-01 12:11:47,693 5692 [main] DEBUG o.s.s.w.a.i.FilterSecurityInterceptor - Validated configuration attributes 
    2017-01-01 12:11:47,695 5694 [main] DEBUG o.s.s.w.a.i.FilterSecurityInterceptor - Validated configuration attributes 
    2017-01-01 12:11:47,713 5712 [main] INFO o.s.s.w.DefaultSecurityFilterChain - Creating filter chain: [email protected]1, [org.springframework.secu[email protected]3a175162, org.spring[email protected]18acfe88, [email protected]559, [email protected], org.[email protected]3a543f31, org.springframework.s[email protected]7569ea63, org.sp[email protected]772861aa, org.springframework.[email protected]7c1e32c9, org.springfram[email protected]1640190a, o[email protected]8f2098e, org[email protected]53ed09e8, org.springfr[email protected]4743a322] 
    

    今私は正しく構成されているようです....しかし、私は自分のWebアプリケーションを保護できません 誰かが私を助けることができますか?

    @Override 
    protected void configure(HttpSecurity http) throws Exception 
    { 
    
        http 
        .authorizeRequests() 
        .antMatchers("/adminWebTheme/**") 
        .permitAll() 
        .antMatchers("/pages/**") 
        .authenticated() 
        .antMatchers("/pages/**") 
        .access("hasRole('ADMIN')") 
        .and() 
        .formLogin() 
        .loginPage("/pages/loginPage") 
        .permitAll() 
        .usernameParameter("username") 
        .passwordParameter("password") 
        .defaultSuccessUrl("/pages/adminHome") 
        .failureUrl("/pages/loginPage?error") 
        .and() 
        .logout() 
        .permitAll() 
        .logoutSuccessUrl("/pages/loginPage?logout") 
        .and() 
        .csrf() 
        .and() 
        .exceptionHandling() 
        .accessDeniedPage("/pages/accessDenied"); 
    
    } 
    

    何も変更:

    は アンジェロ

    提案

    としては私が行うことで、私の春のセキュリティ設定を変更示唆したようにUPDATED

    をいただき、ありがとうございます。春のセキュリティフィルターがURLを傍受しないのは私のようです...理由はわかりません。私はそれが構成の問題だと確信していますが、私は間違っているところ私が理解することはできません...

    アンジェロ

    答えて

    0

    私はどこ私は桟橋を使用して、組み込みてる

    を欠けていたものを考え出し手動でSpringディスパッチャサーブレット を追加しました。そのため、Springセキュリティフィルタも追加する必要がありました.... は私の桟橋で、私は(最も重要なことは、secFilterセクションである)以下を追加しました:

    DispatcherServlet springSvlt = new DispatcherServlet(context); 
         contextHandler.addServlet(new ServletHolder(springSvlt), MAPPING_URL); 
         contextHandler.addEventListener(new ContextLoaderListener(context)); 
         contextHandler.setResourceBase(new ClassPathResource("webapp").getURI().toString()); 
         //Filtro eTag 
         ServletHandler sh = new ServletHandler(); 
         FilterHolder eTagFilter = sh.addFilterWithMapping(ShallowEtagHeaderFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST)); 
         contextHandler.addFilter(eTagFilter, "/*", EnumSet.of(DispatcherType.REQUEST)); 
         //Filtro Gzip 
         FilterHolder gZipFilter = sh.addFilterWithMapping(ShallowEtagHeaderFilter.class, "/*", EnumSet.of(DispatcherType.REQUEST)); 
         gZipFilter.setInitParameter("varyHeader", "true"); 
         contextHandler.addFilter(gZipFilter, "/*", EnumSet.of(DispatcherType.REQUEST)); 
    //  //Filtro sicurezza 
         FilterHolder secFilter = new FilterHolder(new DelegatingFilterProxy("springSecurityFilterChain")); 
         contextHandler.addFilter(secFilter, "/*", EnumSet.allOf(DispatcherType.class)); 
    

    今では正しく

    に動作しますが、すべてに感謝し、私はこれは便利

    アンジェロことができます願っています

    関連する問題