相关疑难解决方法(0)

如何找到Spring Boot中当前登录的用户?

这个Spring Boot应用程序中,有一个Web服务,它为登录用户返回一些数据:

@RequestMapping("/resource")
public Map<String, Object> home() {
    Map<String, Object> model = new HashMap<String, Object>();
    model.put("id", UUID.randomUUID().toString());
    model.put("content", "Hello World");
    return model;
}
Run Code Online (Sandbox Code Playgroud)

想象一下,该方法的返回值取决于当前登录的用户.

如何找出该方法中登录的用户?

java spring-boot

38
推荐指数
5
解决办法
6万
查看次数

如何禁用从url中作为url parameters /传递的解析登录参数

应用程序记录所有请求的urls.这意味着,使用url参数进行身份验证至关重要,因为这会导致日志中充满对的情况(login=abc&password=123).出于这个原因,我已配置spring-security为从中读取参数request-body.这是通过将以下行添加到request-header:

'Content-Type': 'application/x-www-form-urlencoded'
Run Code Online (Sandbox Code Playgroud)

身体将是:

{'login':'admin', 'password':'password'}
Run Code Online (Sandbox Code Playgroud)

没关系,但QA强迫我通过url参数禁用身份验证的可能性.目前,对以下URL的POST也将进行身份验证:

https://example.com/foo?login=admin&password=password
Run Code Online (Sandbox Code Playgroud)

有没有人知道禁用此选项的技巧?最好带注释.

由于评论,我决定在我的问题中添加更多细节.我的配置spring-security.我有

http.usernameParameter("login")
    .passwordParameter("password")
(...)
Run Code Online (Sandbox Code Playgroud)

这使得WebSecurityConfigurerAdapter在参数和正文中搜索登录数据.我希望禁用在网址中搜索这些参数.

java spring spring-security httprequest spring-boot

37
推荐指数
4
解决办法
3196
查看次数

Spring Web MVC:将对象从处理程序拦截器传递给控制器​​?

目前我使用 request.setAttribute() 和 request.getAttribute() 作为将对象从处理程序拦截器传递到控制器方法的一种方式。我不认为这是一种理想的技术,因为它要求我将 HttpServletRequest 作为我的控制器方法的参数。Spring 在向控制器隐藏请求对象方面做得很好,所以除了这个目的我不需要它。

我尝试使用 @RequestParam 注释和我在 setAttribute() 中设置的名称,但当然这不起作用,因为请求属性不是请求参数。据我所知,没有用于属性的 @RequestAttribute 注释。

我的问题是,是否有更好的方法将对象从拦截器传递给控制器​​方法,而无需将它们设置为请求对象的属性?

spring-mvc

5
推荐指数
1
解决办法
5434
查看次数

Spring 3 HandlerInterceptor 将信息传递给控制器

我已经设置了一个 Spring HandlerInterceptor 来向 HttpServletRequest 添加一个属性,以便能够从控制器读取它,遗憾的是这似乎不起作用,这对我来说似乎很奇怪。我做错了吗?知道如何将数据从拦截器传输到控制器吗?

这是两个受影响的类的简化代码

public class RequestInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        request.setAttribute("my-role", "superman");
    }
   [...]
}

@RestController
@RequestMapping("Test")
public class TestController {
    public final Logger logger = LoggerFactory.getLogger(getClass());

    @RequestMapping(value = "something")
    public void something(HttpServletRequest request) {
        logger.info(request.getAttribute("my-role"));
    }

    [...]
}
Run Code Online (Sandbox Code Playgroud)

request.getAttribute("my-role") 返回空值...但如果我在 HandlerInterceptor 的 postHandle 中读取它确实返回异常值,我觉得我错过了一些东西...

编辑:我发现通过“request.getSession().setAttribute”进行会话很有用,但我仍然不明白为什么请求本身在这个用例中不起作用。

java spring

5
推荐指数
1
解决办法
3712
查看次数