2016-04-22 11 views
1

奇妙な理由で、私はログインポストを処理するために登録されたコントローラにヒットできません。私はちょうど私のリソースフォルダにあるこのばかげたイメージにリダイレクトされます:Spring Securityは、提供されたログイン処理のURLに投稿しません。

https://localhost:8443/images/piggy-bank.jpeg 

ここは私のコントローラです。ここで

@RequestMapping(value = "/login/process", method = RequestMethod.POST) 
public String loginPost(HttpSession session, Authentication authentication) { 

    String client_id = (String) session.getAttribute("client_id"); 

    if (client_id.equals(Constants.TRUSTED_CLIENT)) { 

     //TODO: 
     /* 
     * 1. Generate an access_token 
     * 2. Save to database 
     * 3. Form redirect url with all necessary tokens 
     * 4. Return redirect url string 
     */ 

     return "redirect:" + Constants.REDIRECT_TRUSTED_CLIENT; 

    } 

    long userId = AuthenticationUtils.getAuthenticatedUserId(authentication); 
    return "/user/" + userId; 
} 

は私のセキュリティの設定です:

@Configuration 
@EnableWebSecurity 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Autowired 
    @Qualifier("customUserDetailsService") 
    UserDetailsService userDetailsService; 

    @Autowired 
    public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception { 
     auth.userDetailsService(userDetailsService); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http. 
       authorizeRequests() 
       .antMatchers("/","/sign_up","/resources/**").permitAll() 
       .anyRequest().authenticated() 
       .and() 
      .formLogin() 
       .permitAll() 
       .loginPage("/login") 
       .loginProcessingUrl("/login/process") 
       .defaultSuccessUrl("/") 
       .failureUrl("/access_denied") 
       .and() 
      .csrf() 
       .and() 
      .exceptionHandling() 
       .accessDeniedPage("/access_denied") 
       .and() 
      .logout() 
       .permitAll(); 

    } 
} 

そして、ここでは、ビューです:

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
    <head lang="en"> 

     <title>Spring App</title> 

     <!--/*/ <th:block th:include="fragments/headerinc :: head"></th:block> /*/--> 
    </head> 

    <body> 
     <div class="container"> 
      <!--/*/ <th:block th:include="fragments/header :: header"></th:block> /*/--> 

      <div id="mainWrapper"> 
       <div class="login-container"> 
        <div class="login-card"> 
         <div class="login-form"> 
          <form th:action="@{/login/process}" method="post" class="form-horizontal"> 
           <div th:if="${param.error != null}"> 
            <div class="alert alert-danger"> 
             <p>Invalid username and password.</p> 
            </div> 
           </div> 
           <div th:if="${param.logout != null}"> 
            <div class="alert alert-success"> 
             <p>You have been logged out successfully.</p> 
            </div> 
           </div> 
           <div class="input-group input-sm"> 
            <label class="input-group-addon" for="username"><i class="fa fa-user"></i></label> 
            <input type="text" class="form-control" id="username" name="username" placeholder="Enter Username" /> 
           </div> 
           <div class="input-group input-sm"> 
            <label class="input-group-addon" for="password"><i class="fa fa-lock"></i></label> 
            <input type="password" class="form-control" id="password" name="password" placeholder="Enter Password" /> 
           </div> 
           <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" /> 

           <div class="form-actions"> 
            <input type="submit" 
              class="btn btn-block btn-primary btn-default" value="Log in"/> 
           </div> 
          </form> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </body> 
</html> 

は私のネットワークデータを検査、私は/ログイン/プロセスへのフォームのポストが成功したことを確認しますサーバーは正常に応答しました!

Request URL:https://localhost:8443/login/process 
Request Method:POST 
Status Code:302 Found 
Remote Address:[::1]:8443 

春起動中のログは、上記のコントローラにurl "/ login/post"の登録を肯定します。対応するログ:私は、すなわちインデックス(「/」)、でもdefaultSuccessURLページにリダイレクトされるように見えることはできませんので

2016-04-21 20:44:30.725 INFO 25290 --- [   main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/login/process],methods=[POST]}" onto public java.lang.String com.springapp.controllers.UserController.loginPost(javax.servlet.http.HttpSession,org.springframework.security.core.Authentication) 

状況は、より陰湿なものかもしれません。既定のすぐに使用できるログインビューを使用している場合も同じです(つまり、loginProcessingURLとdefaultSuccessfulURLはリダイレクトされません)。私のJSPビューに何か問題がありますか?セキュリティ設定が欠けていますか?

しかし、手動で/ user/{id}または他のURLを入力すると、適切に認証されている限り、ターゲットURLに私は正常に到達します。どういう意味ですか?最後に、ここで

はすべて私のjspに挿入された断片thymeleaf 'header.html' と 'headerinc.html' です:

header.html

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head lang="en"> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 

    <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> 

    <link href="../../static/css/app.css" 
      th:href="@{css/app.css}" rel="stylesheet" media="screen"/> 
    <link href="../../static/css/bootstrap.css" 
      th:href="@{css/bootstrap.css}" rel="stylesheet" media="screen"/> 
    <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.2.0/css/font-awesome.css" 
      th:href="@{/webjars/font-awesome/4.2.0/font-awesome.css}" rel="stylesheet" media="screen"/> 

</head> 
<body> 

<div class="container"> 
    <div th:fragment="header"> 
     <nav class="navbar navbar-default"> 
      <div class="container-fluid"> 
       <div class="navbar-header"> 
        <a class="navbar-brand" href="#" th:href="@{/}">Home</a> 
        <ul class="nav navbar-nav"> 
         <!-- if logged in, then display -logout, else display -login, -Sign up. --> 
         <div th:with="currentUser=${#httpServletRequest.userPrincipal?.name}"> 

          <div th:if="${currentUser != null}"> 
           <form th:action="@{/logout}" method="post"> 
            <input type="submit" value="Log out"/> 
           </form> 
          </div> 

          <div th:if="${currentUser == null}"> 
           <li><a href="#" th:href="@{/login}">Log in</a></li> 
           <li><a href="#" th:href="@{/sign_up}">Sign up</a></li> 
          </div> 

          <!-- This is to simply test some authentication logic--> 
          <a href="#" th:href="@{/users}">All Users</a> 
         </div> 
        </ul> 
       </div> 
      </div> 
     </nav> 

     <div class="jumbotron"> 
      <div class="row text-center"> 
       <div class=""> 
        <h2>Spring Framework Example..</h2> 

        <h3>Spring Boot Web App</h3> 
       </div> 
      </div> 
      <div class="row text-center"> 
       <img src="../../static/images/NewBannerBOOTS_2.png" width="400" 
        th:src="@{/images/piggy-bank.jpeg}"/> 
      </div> 
     </div> 
    </div> 
</div> 
</body> 
</html> 

headerinc.html

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head lang="en" th:fragment="head"> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" media="screen" /> 

    <script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script> 
    <link href="../static/css/guru.css" 
      th:href="@{/css/guru.css}" rel="stylesheet" media="screen"/> 
</head> 
<body> 

</body> 
</html> 

答えて

1

このライン:

.loginProcessingUrl("/login/process") 

は、指定されたパスが送信されたときに送信された認証情報を処理するようにSpring Securityに指示します。デフォルトでは、ユーザはそのユーザのページにリダイレクトされます。 リクエストをSpring MVCとコントローラに渡しません。

多分、リクエストマッピングではなく、あなたが望むものはカスタムAuthenticationSuccessHandlerです。

+1

hahhh!なぜ記事の後の記事は 'loginProcessingUrl'パラメータをカスタムログインコントローラとして描いているのですか? –

関連する問題