Introdução ao httpServletRequest
O objeto HttpServletRequest representa a solicitação do cliente. Quando o cliente acessa o servidor através do protocolo HTTP, todas as informações no cabeçalho da solicitação HTTP são encapsuladas nesse objeto. Através do método fornecido por este objeto, todas as informações solicitadas pelo cliente podem ser obtidas.
introdução
Este artigo apresenta principalmente conteúdo relacionado sobre a segurança da injeção direta do MVC da primavera do HTTPServletRequest. Parece uma pergunta muito simples, para que possamos rastrear o processamento do código -fonte da primavera
Há muito desse tipo de código no controle que escreve Springmvc, se você precisar obter o objeto de solicitação para fazer algo
como:
@Controlador@requestmapping (value = "/user") public class WhomnsActionPage estende abstrateAction {@ReQuestMapping (value = "/página/ativo") public string loanaAccountActivePage (httpServletReQuest request) {// Retire a solicitação para dosnsomethingSTring Pathinfo = solicitação.getPathinfo;Parece que toda vez que quero escrever um controle, tenho que passar a solicitação como parâmetro, o que é muito redundante.
De fato, você pode definir um objeto de solicitação no controle, injetar -o e depois usá -lo a qualquer momento.
como:
public class AbstractionAction {@AUTOWIREDPROTECTED HTTPSERVletRequest Request; ... ...Em seguida, use -o diretamente no controle:
@Controlador@requestmapping (value = "/user") public classe empréstimo e estende abstrateAction {@RequestMapping (value = "/página/ativo") public string loanaaccountactivePage () {// Obtenha solicitação para doSomeThingString pathinfo = request.getPathinfo (); retorno "ativo"; }}Portanto, a questão é que as sevlets são multi-threads e a solicitação cada vez que solicita é realmente um novo objeto. O compartilhamento de referências causará diretamente o thread inseguro?
É conveniente, e o problema também está aqui. Servert é na verdade multi-thread. Existe algum problema de segurança em compartilhar uma solicitação? Analise o código da primavera
1. De onde vem a solicitação injetada?
Verificou -se que a injeção está realmente indo ao webApplicationContextutils para obter o valor através do requestObjectFactory e rastrear
Retorna o valor no requestContextholder. Rastreia o requestContextholder
A solicitação retornada toda vez que é realmente a solicitação na classe de implementação servletwebrequest (servletRequestattributes). Como o requestattributes pertence ao ThreadLocal, a solicitação injetada também é segura por threads.
2. Quando o objeto de solicitação é definido pela primavera?
Classe de implementação de HttpServlet FrameworkServlet-> service()->processRequst()
Cada solicitação definirá a solicitação mais recente e definirá o valor
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.