- VB.NET でクッキーを保持
- Spring ログインリクエストでJSONを返却
- VB.NET 画面からログインPOST
SavedRequest が取得出来ない為、ログイン後リダイレクトが不可。
ログイン後レスポンスを変更する場合は SavedRequestAwareAuthenticationSuccessHandler で指定
Form1.vb
Public cookieData As CookieContainer = New CookieContainer
Private Sub search_proc(cd As String)
Dim url As String = "http://localhost/sample/sampleList?cd=" & cd
Dim req As HttpWebRequest = HttpWebRequest.Create(url)
req.CookieContainer = cookieData
Dim res As HttpWebResponse = req.GetResponse()
Dim reader As StreamReader = New StreamReader(res.GetResponseStream())
Dim jsonString As String = reader.ReadToEnd()
Dim jsonList As List(Of JToken) = JArray.Parse(jsonString).Children.ToList
If (jsonList.Count <> 0) Then
Dim id As String = jsonList(0).Item("id")
If (id = "-1") Then
Form2.ShowDialog()
Exit Sub
End If
End If
For Each itemClass As JObject In jsonList
itemClass.CreateReader()
DataGridView1.Rows.Add(itemClass("id"), itemClass("code"), itemClass("name"))
Next
res.Close()
End Sub
Form2 に以下コントロールを配置
- TextBox1 : ユーザ名
- TextBox2 : パスワード
- Button1 : ログインボタン
Form2.vb
Imports System.Net
Imports System.IO
Imports System.Text
Public Class Form2
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ht As Hashtable = New Hashtable
ht.Add("j_username", TextBox1.Text)
ht.Add("j_password", TextBox2.Text)
Dim param As String = ""
For Each key As String In ht.Keys
param = param & String.Format("&{0}={1}", key, ht(key))
Next
Dim paramBytes As Byte() = System.Text.Encoding.ASCII.GetBytes(param)
Dim req As HttpWebRequest = HttpWebRequest.Create("http://localhost/sample/j_spring_security_check")
Form1.cookieData = New CookieContainer
req.CookieContainer = Form1.cookieData
req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"
req.ContentLength = paramBytes.Length
Dim reqStream As Stream = req.GetRequestStream()
reqStream.Write(paramBytes, 0, paramBytes.Length)
reqStream.Close()
Dim res As HttpWebResponse = req.GetResponse()
For Each cookie In res.Cookies
Console.WriteLine("cookie name = " & cookie.Name & ", value = " & cookie.Value)
Form1.cookieData.Add(cookie)
Next
Dim resStream As Stream = res.GetResponseStream()
Dim sr As New StreamReader(resStream, Encoding.UTF8)
Console.WriteLine("test = " & sr.ReadToEnd())
sr.Close()
Me.Close()
End Sub
End Class
jp/s6131/sample/controller/HomeController.java
@RequestMapping(value = "/login", method = RequestMethod.GET)
@ResponseBody
public List<Sample> login(HttpServletRequest req, Locale locale, Model model) {
List<Sample> sampleList = new ArrayList<Sample>();
Sample sample = new Sample();
sample.setId(new Long(-1));
sampleList.add(sample);
return sampleList;
}

人気ブログランキングへ