2016-08-30 2 views
2

Ich erstelle ein Projekt in AngularJs am Frontend und Spring MVC im Backend.Session Handling in Angular JS, mit Spring MVC

Nehmen wir nun an, wenn ein angemeldeter verwendet in und wenn er will, seine Daten aktualisieren, denn das habe ich eine api erstellt, die Anfrage für EMAILID und den Rest Objekt in der Datenbank des E-Mail-ID

Jetzt aktualisieren habe ich einige Fragen,

1.) Ich möchte nicht CookieStore oder andere sessionStorage oder localstorage (wegen meiner persönlichen Schwachstelle Erfahrung und auch ich möchte nur Sitzung verwenden) in Angular, wie kann ich es in eckigen mit Spring MVC.

2.) Wie kann ich die E-Mail-ID aus der Sitzung abrufen, um Daten zu aktualisieren?

3.) Wenn ein Benutzer auf einem anderen Seite geht, wie kann ich diese Sitzung in einer anderen Seite halten, wie kann ich diese Sitzung überprüfen ist und Benutzer authentisch ist die Seite

Lesen Sie mehr über es viel zu sehen, aber nicht in der Lage, die genaue Lösung mit Sitzung zu finden. Beantworten Sie es dort durch cookieStore.oder localstorage, bitte helfen Sie

Antwort

2

Lassen Sie uns versuchen, zu sehen, was hier geschieht mit Cookies ist der richtige Weg dazu, Sie können denken, es ist nicht sicher, aber ist der sicherste Weg, es zu tun . Mit Cookies teilen Sie die gleiche Sitzung in allen Tabs, so dass Sie in allen Tabs umgehen und teilen können.

Es gibt auch eine alternative Option und URL-Rewriting verwendet, zitiert @vanje in this question in Stackoverflow

die Sitzung nur über einen URL-Parameter enthalten, die Sitzungs-ID identifiziert wird. Daher muss jede interne URL Ihrer Webanwendung mit diesem Parameter mit der Methode HttpServletResponse.encodeURL() erweitert werden. Wenn Sie ein Web-Framework wie Wicket verwenden, ist die Wahrscheinlichkeit gut, dass dies bereits für Sie erledigt ist.

Hier kann nun mit der Angular JS gehen - Spring MVC-Ansatz:

keine Notwendigkeit Es ist die Sitzung, in dem Angular JS-Frontend zugreifen kann, wenn Sie es verwenden müssen, und Sie verwenden JSP Sie kann scriplet verwenden, um die Informationen zu einem <%= session.getAttribute("user") %> zu öffnen, aber wie gesagt, es gibt keine Notwendigkeit, dies zu tun. Sie können Ihre Funktion aufrufen und diese Informationen in Ihrem Controller im Frühjahr abrufen. Sie haben einen Controller in eckigen JS, der im Frühling mit http zu Ihrem REST-Controller wie folgt aufruft. vorausgesetzt, dass Sie Ihre Benutzer zuerst in der Sitzung speichern: oben

$scope.getUserInfo= function() { 
     $http.get(appContextPath +'/rest/getuser/').success(function (data) { 
      $scope.user= data; 
     }); 
    }; 

Sie können eine Anfrage Zuordnung für die URL haben:

@RequestMapping(value = "/rest/getuser", method = RequestMethod.GET) 
@ResponseBody 
public User getUserInfo (HttpSession session) { 
    User nUser = session.getAttribute("user"); 
    return nUser; 
} 
+0

nur eine kurze Frage Ich bin nicht.unter Verwendung von JSP ich verwende einfach .HTML. Seite mit eckigen in diesem Fall, wie kann ich überprüfen.wenn die Sitzung vorhanden ist oder nicht anzuzeigen, um diese Seite an Benutzer – adasdasd

+0

anzuzeigen Sie müssen alles mit Ihrer REST-API tun, wenn Sie die HTML-Ansicht erstellen, müssen Sie Speichern Sie in $ scope Ihre Benutzer-ID, damit Sie sie bei zukünftigen Transaktionen mit Ihrer DB über ein beliebiges $ http (get, post, delete oder put) verwenden können. Um zu überprüfen, ob die Benutzersitzung bereits existiert, können Sie die Sitzung in Angular verwenden, aber mit Spring synchronisiert werden, indem Sie alle REST-Methoden verwenden. Sie können weitere Informationen in [dieser] (https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec#.vrr17998r) Link finden – ZetaPR

2

Ich denke, der beste Weg, eine Methode in Ihren AngularJS-Controller zu erstellen ist und dann ruf es an.

Java-Code:

@RequestMapping(value = "/menu/get", method = RequestMethod.GET, headers="Accept=*/*") 
public @ResponseBody Empleado showMenu(HttpSession session) { 
    Empleado empleado = (Empleado) session.getAttribute("empleado"); 

    return empleado; 
} 

AngularJS Code:

angular.module('myModule') 
    .controller('myMenuController', ['$scope', '$http' 
     function($scope, $http){ 

     getEmpleadoInfo = function() { 
      $http.get(myContextPage + '/menu/get') 
       .then(function(data) { 
        $scope.empleado = data; 
       }) 
     } 

     getEmpleadoInfo(); 

    }]); 

Auf diese Weise, wenn Sie die Seite laden, wird das Objekt auf dem Umfang geladen werden.