私はwebapplicationとAndroidクライアントを持っています。私は安全なログイン方法を実装したいと思います。私は、Webサービスメソッドにリクエストを送信し、クライアントから:Spring Security 3でのAndroid認証
@POST
@Produces(MediaType.TEXT_PLAIN)
@Path("/login")
public String login(String credentials) {
JSONObject jo = null;
String name = "";
String password = "";
try {
jo = new JSONObject(credentials);
name = jo.getString("name");
password = jo.getString("password");
} catch (JSONException e) {
e.printStackTrace();
}
HttpResponse r = springSecurityCheck(name, password);
for (Header h : r.getAllHeaders()) {
System.out.println(h.getName() + " " + " " + h.getValue() + "");
}
String s = r.getFirstHeader("Location").toString();
boolean isError = s.contains("login_error");
if (!isError) {
Header[] cookies = r.getHeaders("Set-Cookie");
for (int i = 0; i < cookies.length; i++) {
if (cookies[i].toString().contains(
"SPRING_SECURITY_REMEMBER_ME_COOKIE")) {
String[] cookie = cookies[i].toString().split("=");
String token = cookie[1].substring(0,
cookie[1].indexOf(";"));
if (token != null) {
return "token:" + token;
}
}
}
}
System.out.println(" ----- Login from" + name
+ " failed----- ");
return "newLogin";
}
springsecuritycheckには、以下のん:
public HttpResponse springSecurityCheck(String name, String password) {
DefaultHttpClient client = new DefaultHttpClient();
HttpPost requestLogin = new HttpPost(
"http://mywebapp.com/j_spring_security_check?");
HttpResponse response = null;
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("j_username", name));
params.add(new BasicNameValuePair("j_password", password));
params.add(new BasicNameValuePair("_spring_security_remember_me","true"));
try {
requestLogin
.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
response = client.execute(requestLogin);
return response;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
だから、すべてが正常に動作します。トークンはserverdataベースのpersitent_loginsテーブルに格納され、loginmethodはトークンをクライアントに返します。しかし、他のWebサービスメソッドへのさらなるリクエストにトークンを使用するにはどうすればよいですか?
たとえば、springsecurityログインURLは、j_spring_security_check?j_username = "abc" & j_password = "xyz"です。 j_token = "1d3ds"のようなURLはありますか?あなたの助け 挨拶
はい、そうです。ユーザー名またはトークンは検証のためのものです。しかし、それにもかかわらず、私はこのトークンで何かをして、どのユーザーからリクエストが来るのかを検証する必要があります。しかし、私はどのように知りません... –