2016-07-19 7 views
1

Ich habe versucht, Login-Seite mit Feder Sicherheit zu erstellen. Ich brauche eine Art von Login. Und die URL für den Login muss gleich sein. Für examleSpring MVC der richtige Weg, rufen Sie verschiedene Methoden durch einen Link

Ich öffne Haupt-Login-Seite - localhost:8080/login

Dann Eingang ich einige Informationen und drücken Sie die Taste „next“

bewege ich mich zu localhost:8080/default/login

Auf dieser Seite habe ich zwei Arten von Login - von ip, per SMS, von etc. Und wenn ich Taste drücken "ip" ich muss sehen url - localhost:8080/default/login

aber in Controller-Methode loginByIp();

anrufen

Und wenn ich Taste "per SMS" muss ich sehen url - localhost:8080/default/login

aber in Controller-Methode aufrufen loginBySms();

I-Lösung

@RequestMapping(value = "/default/login", params = "sms", method = RequestMethod.POST) 
public ModelAndView sms(@RequestParam String msisdn) { 
//login by sms 
} 

und

@RequestMapping(value = "/default/login", params = "ip", method = RequestMethod.POST) 
public ModelAndView ip(@RequestParam String msisdn) { 
//login by ip 
} 

gefunden Und in Form auf der Seite erstelle ich versteckte param

<input class="form-control" name="type" value="ip" type="hidden"/> 

oder

<input class="form-control" name="type" value="sms" type="hidden"/> 

Und in jeder Form nenne ich

<form action="/default/login" method="post"> 

Es funktioniert. Aber ich denke es ist schlechte Übung oder vielleicht gibt es einfachere oder korrekte Seite.

Antwort

0

Wie Sie auf zwei verschiedene Aktionen beziehen, meiner Meinung nach der beste Weg wäre, sie Endpunkte verschiedene REST

  • sms zuweisen: /default/login/by-sms
  • ip: /default/login/by-ip

Und dann Die Formulare würden wie folgt aussehen:

<form action="/default/login/by-ip" method="post">...</form> 
... 
<form action="/default/login/by-sms" method="post">...</form> 

Und die Handler sauber abgebildet:

@RequestMapping(value = "/default/login/by-sms", method = RequestMethod.POST) 
public ModelAndView loginBySms(@RequestParam String msisdn) { 
//login by sms 
} 

@RequestMapping(value = "/default/login/by-ip", method = RequestMethod.POST) 
public ModelAndView loginByIp(@RequestParam String msisdn) { 
//login by ip 
} 

So wäre es leichter zu verstehen,/zu halten.

Andernfalls würde Ihr Ansatz auch funktionieren.

+0

ist der Standard Weg. und natürliches Recht. aber meine Aufgabe ist es, den gleichen Link zu zeigen – user5620472

+0

@Matyas Ich stimme zu, einzelne Verantwortung Grundsatz, verschiedene Aktionen, differents Endpunkte – cralfaro

+0

** "Zeige den gleichen Link" ** - Was meinst du damit? Die Browser-URL der Seite kann dieselbe sein, es ist nur die "Aktion" des Formulars, die anders wäre, die für den Benutzer nicht sichtbar ist.Außerdem können Sie nach einer erfolgreichen Anmeldung in beiden Fällen auf die gleiche Seite umleiten. – Matyas