Introduction à httpservletRequest
L'objet HTTPServletRequest représente la demande du client. Lorsque le client accède au serveur via le protocole HTTP, toutes les informations de l'en-tête de demande HTTP sont encapsulées dans cet objet. Grâce à la méthode fournie par cet objet, toutes les informations demandées par le client peuvent être obtenues.
introduction
Cet article présente principalement du contenu connexe sur la sécurité de l'injection directe de Spring MVC de HTTPServletRequest. Cela semble une question très simple, nous pouvons donc suivre le traitement du code source de Spring
Il y a beaucoup de ce type de code dans le contrôle qui écrit SpringMVC, si vous avez besoin d'obtenir l'objet de demande pour faire quelque chose
comme:
@ Contrôleur @ requestmapping (value = "/ user") public class woanActionPage étend AbstractAction {@RequestMapping (value = "/ page / active") public String LOANAACCOUNTACTIVEPAGE (httpServLetRequest request) {// get request to DosomeThingSstringIl semble que chaque fois que je veux écrire un contrôle, je dois passer la demande en tant que paramètre, qui est très redondant.
En fait, vous pouvez définir un objet de demande dans le contrôle, l'injecter, puis l'utiliser à tout moment.
comme:
classe publique AbstractAction {@AutowiredProtected httpServleRequest request; ... ...Puis utilisez-le directement en contrôle:
@ Contrôleur @ requestmapping (value = "/ user") public class woanActionPage étend AbstractAction {@RequestMapping (value = "/ page / active") public String LOANAACCOUNTACTIVEPAGE () {// get request to DosomeThingString pathinfo = request.getPathinfo (); return "active"; }}La question est donc que les sévlets sont multipliés et que la demande à chaque demande est en fait un nouvel objet. Le partage des références provoquera-t-il directement un thread insécurisé?
C'est pratique et le problème est également là. SERVERT est en fait multi-thread. Y a-t-il un problème de sécurité avec le partage d'une demande? Analyser le code de ressort
1. D'où vient la demande injectée?
Il est constaté que l'injection va en fait sur WebApplicationContextUtils pour obtenir la valeur via le requersObjectFactory et le suivre
Renvoie la valeur dans RequestContexTholder. Suite à demande de conflit
La demande renvoyée à chaque fois est en fait la demande de la classe d'implémentation servletwebRequest (ServLetRequestAttributes). Étant donné que DequestAttributes appartient à ThreadLocal, la demande injectée est également un filetage.
2. Quand l'objet de demande est-il défini par le printemps?
HttpServlet Implémentation Classe FrameworkServlet-> service()->processRequst()
Chaque demande définira la dernière demande et définira la valeur
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.