Pada bagian sebelumnya, kami menyelesaikan operasi dasar keranjang belanja, tetapi ada masalah: Ketika pengguna mengklik untuk menyelesaikan, kami harus membuat penilaian login untuk menentukan apakah pengguna masuk. Jika ia tidak masuk, ia harus terlebih dahulu membiarkan pengguna masuk. Ini menggunakan teknologi filter. Filter secara khusus mencegat permintaan halaman. Ini mirip dengan prinsip pencegat. Interceptor secara khusus mencegat permintaan tindakan, sehingga masing -masing memiliki kegunaannya sendiri. Jika itu adalah lompatan halaman secara langsung tanpa melakukan tindakan, kita hanya perlu menulis pencegat. Jika kita perlu melompat ke tindakan untuk diproses, maka kita harus menulis pencegat.
1. Prinsip Login Jump <br /> Biarkan saya berbicara terlebih dahulu tentang prinsip implementasi: Tulis filter dan konfigurasikan URL yang perlu dicegat di web.xml. Dengan cara ini, ketika URL permintaan pengguna memenuhi konfigurasi, filter yang kami tulis akan dieksekusi. Di filter, pertama -tama kami memeriksa apakah ada pengguna yang dicatat dalam sesi. Jika tidak ada indikasi bahwa tidak ada login, maka dapatkan URL halaman dan parameter yang ingin diakses pengguna, menjahitnya kembali ke URL dan memasukkannya ke dalam sesi, dan kemudian mengalihkan ke halaman login, masuk dan melompat ke pemrosesan aksi, dan setelah diproses, melompat ke URL yang disimpan dalam sesi, yaitu, di mana pengguna awalnya diinginkan. Ini melengkapi lompatan login.
2. Implementasi lompatan login
Ketika halaman keranjang belanja nyata digunakan, kami mengklik checkout, dan secara otomatis akan melompat ke halaman konfirmasi pesanan, sebagai berikut:
Namun, jika pengguna tidak masuk saat ini, kami pasti tidak akan melompat ke halaman konfirmasi pesanan secara langsung, jadi kami harus menggunakan filter untuk memblokirnya dan membuat penilaian. Mari tulis filter di bawah ini:
2.1 Implementasi filter
Implementasi filter perlu menerapkan antarmuka filter dan menimpa tiga metode. Bahkan, kita terutama perlu menimpa salah satunya. sebagai berikut:
public class UserFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; Respons httpservletResponse res = (httpservletResponse); // Tentukan apakah sesi saat ini memiliki informasi pengguna jika (req.getSession (). GetAttribute ("user") == null) {// Simpan alamat URL bahwa pelanggan saat ini ingin pergi ke string gourl = req.getSerVletpath (); // Dapatkan alamat yang pengguna ingin pergi ke string param = req.getQueryString (); // Dapatkan parameter yang dibawa di alamat if (param! = Null) {gourl = gourl + "?" + param; // Jalan ulang Alamat Permintaan + Parameter} // Simpan alamat yang ingin diakses oleh pelanggan saat ini di sesi req.getSession (). SetAttribute ("Gourl", Gourl); // permintaan ilegal, lompat ke halaman login req.getSession (). Setattribute ("error", "permintaan ilegal, silakan masuk!"); res.sendredirect (req.getContextPath () + "/ulogin.jsp"); } else {// Jika ada filter berikutnya, lompat, jika tidak langsung ke rantai halaman target.dofilter (permintaan, respons); }} @Override public void init (filterconfig config) melempar ServletException {// TODO Metode yang dihasilkan otomatis Stub}} Dilihat dari kode implementasi, metode dofilter terutama diare. Dalam metode ini, pertama -tama tentukan apakah ada informasi pengguna di sesi saat ini. Jika tidak, itu berarti tidak ada login. Kemudian Anda harus terlebih dahulu menyimpan alamat URL dan parameter dalam alamat yang ingin digunakan pengguna, mengejanya ke URL baru dan menyimpannya di sesi, dan kemudian mengarahkannya ke halaman login untuk membiarkan pengguna masuk. Jika ada informasi pengguna di sesi, itu berarti Anda telah masuk dan langsung melepaskannya ke halaman, pengguna ingin kunjungi.
Setelah menulis filter, jangan lupa untuk mengkonfigurasi URL untuk memfilter di web.xml, sebagai berikut:
Jadi di atas {shop} /user/confirm.jsp akan difilter. Selanjutnya, mari kita lihat halaman login. Ini sebenarnya memiliki dua kotak, nama pengguna, dan kata sandi, yang terutama tergantung pada tindakan yang melompat ke:
Kami melihat bahwa ia melompat ke metode login di UserAction untuk menjalankan logika. Di sini kami menerapkan UserAction:
2.2 Implementasi Tindakan
Di UserAction, pertama -tama kami membuat penilaian login, yaitu mencari pengguna dengan nama pengguna dan kata sandi dalam database. Jika berhasil, simpan pengguna di sesi, lalu kembalikan hasilnya dan serahkan ke Struts2 untuk diproses. Kodenya adalah sebagai berikut:
@Controller ("UserAction") @scope ("ProtoType") Public ClassAction memperluas basa <user> {public string login () {// penilaian model login = userservice.login (model); if (model == null) {session.put ("error", "login gagal"); mengembalikan "login"; } else {// Login berhasil, pertama -tama simpan pengguna di session session.put ("user", model); // Pertahankan lompatan halaman berdasarkan apakah gourl dalam sesi memiliki nilai jika (session.get ("gourl") == null) {return "index"; // lewati beranda} else {return "gourl"; }}}}Mari kita lihat konfigurasi di struts.xml:
Karena kami memiliki gourl dalam sesi, tetapi di struts.xml, kami tidak dapat mendapatkan sesi dan kemudian parameter dalam kode Java, tetapi kami dapat mengambilnya dari tumpukan nilai. Di atas adalah metode mendapatkan data dari tumpukan nilai.
2.3 Penilaian login dari lapisan layanan
Lapisan layanan terutama adalah metode login yang digunakan dalam tindakan di atas, dan implementasinya relatif sederhana, sebagai berikut:
// Antarmuka Public Interface UserServer PublicService memperluas BASESERVICE <User> {// Pengguna masuk dan mengembalikan login pengguna publik pengguna (pengguna pengguna); } // UserServiceImpl Implementasi @Service ("Userservice") Public Class UserserServiceImpl memperluas BASESERVICEIMPL <USERS> mengimplementasikan UserserService {@Override Login Pengguna Publik (Pengguna Pengguna) {String HQL = "dari pengguna u di mana u.login =: login dan u.pass =: pass"; " return (user) getSession (). createqueery (hql) // .setstring ("login", user.getLogin ()) // .setstring ("pass", user.getPass ()) // .UniquereSult (); }}Oke, jadi kami menggunakan filter untuk mewujudkan penilaian dan lompatan login pengguna. Setelah masuk, kita dapat melompat ke halaman konfirmasi pesanan. Efeknya adalah sebagai berikut:
Seluruh tes proses telah selesai dan fungsinya normal. Bahkan, kita dapat memperbaikinya sedikit lagi. Kita harus benar -benar membuat penilaian login sebelum menambahkannya ke keranjang belanja. Dengan kata lain, halaman keranjang belanja sudah dalam keadaan login, dan di sini adalah halaman konfirmasi pesanan untuk menentukan login. Namun, jika kita membuat penilaian sebelum halaman keranjang belanja, akan sulit bagi kita untuk menggunakan filter. Kita harus menggunakan pencegat, karena permintaan tindakan bukan halaman biasa saat melompat ke halaman keranjang belanja. Saat meminta tindakan, kita harus menggunakan pencegat untuk mencegatnya. Mari kita tingkatkan ini nanti. Sekarang kami pada dasarnya akan menerapkan fungsi di sini. Oke, penilaian login dan lompatan selesai.
Alamat asli: http://blog.csdn.net/eson_15/article/details/51425010
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.