春の起動アプリケーションに認証機能を追加する際に問題があります。 以下のようにセッションパターンを実装しました。セッションHTTP - 春と角2
AdminSession.java
@Component
@Scope(value="session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class AdminSession {
private final String id = UUID.randomUUID().toString();
private Admin admin;
public String getId() {
return id;
}
public Admin getAdmin() {
return admin;
}
public void setAdmin(Admin admin) {
this.admin = admin;
}
}
AdminController.java
@RequestMapping("/admin")
@CrossOrigin
@RestController
public class AdminController extends RestAbstractController<Admin, AdminService>{
@Autowired
private AdminService adminService;
@Autowired
private AdminSession adminSession;
@RequestMapping(value="/auth",method=RequestMethod.POST)
public ResponseEntity<Admin> auth(
@RequestParam("pseudo") String pseudo,
@RequestParam("password") String password,
){
Admin a = this.adminService.auth(pseudo, password);
if(a instanceof Admin) {
this.adminSession.setAdmin(a);
System.out.println("[DEBUG] Login "+this.adminSession.getAdmin());
this.displaySessionInfo();
}else System.err.println("[ERROR] a is not Admin instance");
return new ResponseEntity<Admin>(a,HttpStatus.ACCEPTED);
}
public Admin add(@RequestBody Admin admin){
if(!this.adminService.exist(admin.getPseudo())){
return super.add(admin);
}else return new Admin();
}
@RequestMapping("/isAuth")
public Admin isAuth(){
this.displaySessionInfo();
return this.adminSession.getAdmin();
}
private void displaySessionInfo(){
System.out.println("[DEBUG] Session info : "+this.adminSession.getId()+" "+this.adminSession.getAdmin()+" "+this.adminSession.toString());
}
}
問題は、私は角度側に接続しようとすると、春はセッション中にユーザーを正しく保存していることです。しかし、ログイン後にURL '/ admin/isAuth'にアクセスしようとすると、セッションは同じではありません。
コンソールログ
2017-05-03 19:08:52.258 INFO 756 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 124 ms
# FIRST LOGIN
[DEBUG] Client connexion : 127.0.0.1 on /admin/auth
[DEBUG] Login root
[DEBUG] Session info : 31e7a837-7b0e-4bcc-83a2-b5297a76d2e0 root [email protected]
# LOGIN SUCCESSFUL
# CHECK IS LOGIN
[DEBUG] Client connexion : 127.0.0.1 on /admin/isAuth
[DEBUG] Session info : f83ba190-0faa-480b-be1d-4b2745d4a168 null [email protected]
側度2
Admin.service.ts
auth(pseudo:string,password:string):Observable<Admin>{
let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded;' });
let options = new RequestOptions({ headers: headers });
return this.http.post(this.provider.getURL()+"/admin/auth","pseudo="+pseudo+"&password="+password,options)
.map(this.extractData);
}
Login.component.ts私は私のHTTPセッションを失ったのはなぜ
submit(){
this.process=true;
this.adminService.auth(this.pseudo,this.password).subscribe(t=>{
this.adminService.isAuth();
this.process=false;
this.adminService.isAuthentified = true;
this.provider.tokenSession = t;
this.adminService.isAuth().subscribe(t=>console.log("Test login"));
this.router.navigate(['/']);
},err=>console.error(err));
}
?
ありがとうございました。 "providerService" 私は、Webサービスの春にジュストIPアクセスを持っているで
まずブラウザまたは他のHTTPクライアントでテストしましたか? – wannadream
私は、同じhttpブラウザ、同じonglet、別のものを使ってテストします... –
この注入方法を教えてもらえますか? – wannadream