- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有 Spring MVC 应用程序,托管在 Tomcat 容器中。 Tomcat 以 NginX 为前端,因此我在 NginX 配置中明确设置了 header :
location / {
proxy_passhttp://127.0.0.1:8000
;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
这似乎工作正常,标题在那里(我在调试器中看到它)。
现在,我尝试关注 this solution here ,带有请求包装和过滤器,但它不起作用,因为显然我自定义包装的请求对象不是 MVC 机制使用的对象。映射如下:
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter-mapping>
<filter-name>RealIPFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我尝试在代码中的两个(不同)位置提取远程地址:
1)
public class PostAuthSuccessHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(
HttpServletRequest request,
HttpServletResponse response,
Authentication authentication)
throws IOException, ServletException {
// here
request.getRemoteAddr();
}
}
和
2)
public class LoginFailureEventListenter implements
ApplicationListener<AuthenticationFailureBadCredentialsEvent> {
@Override
public void onApplicationEvent(AuthenticationFailureBadCredentialsEvent event) {
String remoteIP = null;
Object src = event.getSource();
if(src instanceof UsernamePasswordAuthenticationToken) {
UsernamePasswordAuthenticationToken upat = (UsernamePasswordAuthenticationToken) src;
if(upat.getDetails() instanceof WebAuthenticationDetails) {
// here
remoteIP = ((WebAuthenticationDetails)upat.getDetails()).getRemoteAddress();
}
}
}
用 Spring MVC 解决这个问题的正确方法是什么?
编辑
由于应用程序受到 Spring 安全性的保护,这也可能只与使 Spring 安全性接受包装请求有关,或者将此过滤器应用为处理链中的第一个过滤器,或者达到那种效果(如果可能的话)。
最佳答案
确保包装发生在 Spring 安全之前。在 spring 安全的过滤器映射之前移动包含你或包装过滤器的过滤器映射元素。
关于java - Spring MVC 应用程序中 NginX 反向代理后面的 getRemoteAddr()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20141886/
我正在尝试查找客户端的 IP。我被告知 'request.getHeader("HTTP_X_FORWARDED_FOR")' 不可信任,因为它可能是伪造的,我应该改用 request.getRemo
这个问题已经有答案了: How do I get the remote address of a client in servlet? (11 个回答) 已关闭 7 年前。 我们需要通过 Seam 操
我现在正在学习 JSP。我试图测试一个非常简单的示例 JSP 文件,里面只有一行代码:...... 我检查了这个 JSP 文件,它运行良好,为我提供了预期的信息。但是,只有上面的代码输出在不同的浏览器
@RequestMapping(value = "/origin/test/", method = RequestMethod.GET, headers = "Accept=application/j
根据我的理解,以下代码返回错误: HttpServletRequest httpRequest = (HttpServletRequest) request; String userIPAddress
ServletRequest.getRemoteAddr() 的 Javadoc没有提及返回的 IP 地址的格式。这在实现过滤器时很烦人。我们可以指望什么?有没有可以依赖的官方规范?谢谢。 最佳答案
这个问题已经有答案了: How do I get the remote address of a client in servlet? (11 个回答) 已关闭 7 年前。 我正在使用 tomcat
为什么 HttpServletRequest.getRemoteAddr()返回 null 有时? 10 个相同的请求中大约有 2 个会无缘无故返回 null。 最佳答案 使用 Tomcat7。显然
我正在进行 API 调用,该调用需要请求 IP 地址。我正在使用 ServletRequest.getRemoteAddr() 来获取请求的 IP。对于一位用户,getRemoteAddr() 返回的
ServletRequest.getRemoteAddr() 是否有理由将客户端 IP 地址作为字符串而不是 int/long/IPSomethingInstance 返回? 或者换个方式问:有没有g
我有一个 jsp 网络应用程序。我正在使用代码设置隐藏输入的值 request.getRemoteAddr() 填写客户端的IP地址。当我的 webapp 部署在 tomacat/windows 上时
在我的 Tomcat 托管网络应用程序中,doGet(...) 方法的前两行是: String ip = request.getRemoteAddr(); System.out.println("ip
我有 Spring MVC 应用程序,托管在 Tomcat 容器中。 Tomcat 以 NginX 为前端,因此我在 NginX 配置中明确设置了 header : location / { prox
这个问题在这里已经有了答案: How do I get the remote address of a client in servlet? (11 个答案) 关闭 6 年前。 我正在用 java
如果我用 Java 6 运行 Tomcat 7,HttpServletRequest.getRemoteAddr() 方法会返回我期望的 IP 地址。 如果我用 Java 8 运行 Tomcat 8,
我有一个在 Tomcat 中运行的 Java servlet 应用程序,出于安全原因,我只希望能够从机器本身(或者也可能是我自己的电脑)运行一个管理命令。因此,为了强制执行此操作,我检查了我收到的 H
Tomcat 中的 HttpServletRequest.getRemoteAddr() 返回 IPv6 格式的 IP 地址,但我想将其配置为返回 IPv4。 我通过“localhost”访问 ser
我用 Spring/GWT 制作了一个使用 Flash 上传文件的网络应用程序。 当我使用 GWT 发送 ajax 请求并尝试获取用户 ip 地址时,我得到一个 ipv4 地址,例如:127.0.0.
我正在尝试在我的 webApplication 中打印登录用户的 IP 地址。如果用户使用 IP 地址 192.168.10.120:8080/WebApplication 从另一台 PC(在同一网络
我正在尝试使用以下代码在 jsp 页面中获取我的 IP 地址: 这会打印 0:0:0:0:0:0:0:1,而不是我的 IP 地址。这是应该的吗?为什么它没有显示我的 IP 地址? 谢谢 最佳答案 这
我是一名优秀的程序员,十分优秀!