2016-03-30 6 views
3

私はSpring SecurityをSpringブートアプリケーションで使用していますが、現在ログインしているユーザーをPrincipal#getNameから取得したいのですが、テンプレート解決のエラーがあり、 。現在のログインしているユーザーをspring + angularにする

これは私のコントローラである:

import java.security.Principal; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

@Controller 
public class PageController { 

    @RequestMapping(value = "/api/loggeduser", method = RequestMethod.GET) 
    public String printWelcome(ModelMap model, Principal principal) { 
     String name = null; 
     if (principal !=null) { 
      name = principal.getName(); 
     } 
     model.addAttribute("username", name); 

     return name; 
    } 

} 

そして、これは私のAngularJsがログインしているユーザーを取得する機能である:

app.controller('Usercontr', function($scope, $http) { 
    $http.get("/api/loggeduser").success(function (data) { 
     $scope.nom = data; 
     console.log($scope.nom) 
    }) 
}); 

そして、ここではエラーです:

Error resolving template "kamel.mili", template might not exist or might not be accessible by any of the configured Template Resolvers

Kamel.miliですログインしたユーザー名手伝ってくれませんか。私はログインページにthymeleafを使用していますが、その他のものはすべてHTML + AngularJsです。私はなぜthymeleafがこのコントローラーに手を携えていたのか分かりません。

答えて

5

あなたのコントローラに@ResponseBody注釈を追加:@Controllerステレオタイプアノテーションを使用している場合は

@ResponseBody 
@RequestMapping(value = "/api/loggeduser", method = RequestMethod.GET) 
public String printWelcome(ModelMap model, Principal principal) { ... } 

、Spring MVCのはViewにごString戻り値を解決しようとします、したがって、エラー:

Error resolving template "kamel.mili", template might not exist or might not be accessible by any of the configured Template Resolvers

戻り値をレスポンス本体に書き出す場合は、コントローラを@RestControllerにするか、特定のコントローラにで注釈を付けることができます。

これはちょっと話題ですが、クライアントサイドビューレンダリングを使用しているので、ModelMapはかなり役に立たないです。あなたは安全にそれを取り除くことができます。

+0

それは私が問題retreivingデータを持っていることが解析できないようです –

-1

テンプレートリゾルバを正しく設定している場合は、テンプレートを確認する必要があります。 printWelcome()から返される文字列は、ビュー/テンプレートフォルダに作成されたビューのいずれかと一致する必要があります。あなたの場合は、自分自身のユーザー名を返しています。

3

あなたは、次のように実行する必要があります。

@RequestMapping(value = "/api/loggeduser", produces =MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<String> findMessagesForUser(Principal principal) { 
     return new ResponseEntity<String>(principal.getName(), HttpStatus.OK); 
} 

それとも、応答ビルダーを使用することができた:

@RequestMapping(value = "/api/loggeduser", produces =MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<String> findMessagesForUser(Principal principal) { 
     return ResponseEntity.ok(principal.getName()); 
} 
関連する問題