2014-12-06 34 views
0

我有春天沒有得到的javax.servlet IP地址和HttpServletRequest的

https://github.com/CarefreeCoding/Gradle-Spring-Hibernate-example

一個項目,我希望能夠得到訪問者的IP地址。要做到這一點,我需要使用HttpServletRequest,因爲我通過搜索找到了。

但是javax.servlet庫似乎找不到。

我試過在我的build.gradle腳本中包含'javax.servlet:servlet-api:2.5',但是這打破了我的項目,作爲this question的解釋。

所以問題是。我怎樣才能使用從

'org.springframework:spring-core:4.1.2.RELEASE', 
    'org.springframework:spring-web:4.1.2.RELEASE', 
    'org.springframework:spring-webmvc:4.1.2.RELEASE', 
    'org.springframework:spring-orm:4.1.2.RELEASE', 
    'org.springframework:spring-context:4.1.2.RELEASE', 
    'org.springframework:spring-tx:4.1.2.RELEASE' 

獲取訪問者的IP地址?或者至少以某種方式訪問​​HttpServletRequest。

回答

1

修改的build.gradle在下列方式:

providedCompile 'javax.servlet:javax.servlet-api:3.1.0' //configuration taken from war plugin 

//below dependencies added because the app wasn't starting properly 
compile 'ch.qos.logback:logback-classic:1.0.13' 
compile 'ch.qos.logback:logback-core:1.0.13' 
compile 'log4j:log4j:1.2.17' 
compile 'org.slf4j:slf4j-api:1.7.5' 
compile 'org.slf4j:jcl-over-slf4j:1.7.5' 
compile 'org.slf4j:jul-to-slf4j:1.7.5' 
compile 'org.slf4j:slf4j-log4j12:1.7.5' 

然後修改src/main/java/example/controllers/IndexController.java

package example.controllers; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

import javax.servlet.http.HttpServletRequest; 

@Controller 
@RequestMapping("/") 
public class IndexController { 
    @RequestMapping(method = RequestMethod.GET) 
    public String printWelcome(ModelMap model, HttpServletRequest request) { 
     System.out.println("Request " + request.getRemoteAddr()); 
     model.addAttribute("message", "Hello World!!!"); 
     return "indexPage"; 
    } 
} 

它打印請求0:0:0:0:0:0: 0:1

+1

我可能會補充:'確保你部署在支持3.1 api的容器中'。 – Michal 2014-12-06 23:12:59

+0

我不能夠感謝你。你是最棒的。我花了一個多星期的時間纔得到答案,無濟於事。 – Quillion 2014-12-06 23:13:20

+0

不客氣:) – Opal 2014-12-06 23:19:04

0

other問題所述,您已經有了servlet- api在項目中,不需要將javax.servlet:servlet-api:2.5添加到您的項目定義中。因此,您應該能夠access HttpServletRequest

但是,如other問題中所述,您的版本爲3.0.1的servlet-api不包含getRemoteAddr()方法,如果這是您想要使用的。

+0

那麼你會推薦我用什麼來調用'getRemoteAddr()'? – Quillion 2014-12-06 23:14:34

+0

如果您可以負擔得起選擇您的容器,那麼其他答案是正確的,您將servlet api升級到3.1,使用getRemoteAddr,但必須確保您的容器支持3.1。否則,你可能會看看頭 - 從stackoverflow.com/questions/527638/getting-the-client-ip-address-remote-addr-http-x-forwarded-for-what-else-coul - 你可以從http請求中獲得,3.1中的getRemoteAddr()impl不能做更多的事情。 – Michal 2014-12-06 23:20:41

+0

我可以使用任何我想要的東西,因爲這只是爲了學習目的而開展的有趣項目。然而,你說這個容器是什麼? – Quillion 2014-12-06 23:42:44