Pengantar HttpServletRequest
Objek HttpservletRequest mewakili permintaan klien. Ketika klien mengakses server melalui protokol HTTP, semua informasi dalam header permintaan HTTP dienkapsulasi dalam objek ini. Melalui metode yang disediakan oleh objek ini, semua informasi yang diminta oleh klien dapat diperoleh.
perkenalan
Artikel ini terutama memperkenalkan konten terkait tentang keamanan injeksi langsung Spring MVC dari httpservletRequest. Tampaknya pertanyaan yang sangat sederhana, jadi kami dapat melacak pemrosesan kode sumber musim semi
Ada banyak kode semacam ini dalam kontrol yang menulis springmvc, jika Anda perlu mendapatkan objek permintaan untuk melakukan sesuatu
menyukai:
@Controller@requestMapping (value = "/user") Public Class LoanActionPage Memperluas Abstractaction {@RequestMapping (value = "/page/Active") Public String LoanaAccountActivePage (httpservletRequest Request) {// Dapatkan permintaan ke doSomethingString pathinfo = request.getpathinfo (); Active "Active" Active "Active" Active "Active";Tampaknya setiap kali saya ingin menulis kontrol, saya harus meneruskan permintaan sebagai parameter, yang sangat berlebihan.
Bahkan, Anda dapat mendefinisikan objek permintaan dalam kontrol, menyuntikkannya, dan kemudian menggunakannya kapan saja.
menyukai:
Abstrak Public Class {@AutoWiredProtected httpservletRequest permintaan; ... ...Kemudian gunakan secara langsung di kontrol:
@Controller@requestMapping (value = "/user") Public Class LoanActionPage Memperluas Abstractaction {@RequestMapping (value = "/page/Active") Public String loanaAccountActivePage () {// Dapatkan permintaan ke dosomethingString pathinfo = request.getPathinFo (); return "Active"; }}Jadi pertanyaannya adalah, sevlets multi-threaded, dan permintaan setiap kali mereka meminta sebenarnya adalah objek baru. Akankah berbagi referensi menyebabkan utas tidak aman?
Ini nyaman, dan masalahnya juga ada di sini. Servert sebenarnya multi-threaded. Apakah ada masalah keamanan dengan berbagi permintaan? Menganalisis kode pegas
1. Dari mana datangnya permintaan yang disuntikkan?
Ditemukan bahwa injeksi sebenarnya akan ke webapplicationContextutils untuk mendapatkan nilainya melalui requestObjectFactory dan melacaknya
Mengembalikan nilai di RequestContextholder. Melacak RequestContExtholder
Permintaan yang dikembalikan setiap waktu sebenarnya adalah permintaan di kelas implementasi ServletWebRequest (ServletRequestAttributes). Karena requestAttributes milik Threadlocal, permintaan yang disuntikkan juga aman.
2. Kapan objek permintaan diatur oleh Spring?
Kelas Implementasi Httpservlet FrameworkServlet-> service()->processRequst()
Setiap permintaan akan menetapkan permintaan terbaru dan menetapkan nilainya
Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.