当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Security中获取get参数?

廉高邈
2023-03-14

我使用的是Spring Security3.1,我想在用户登录之前从URL获取参数。所以我希望正在访问我的登录页面的用户发送给我一个redir参数(包含他想要在他通过身份验证后转到的URL)。当我请求页面时,而不是当我尝试提交表单以登录时。

更新以获取更多信息:我的登录页面相当简单,基本上是:一个表单通过POST方法调用/j_spring_security_check(带有j_username和j_password参数)。

我的身份验证提供程序实现了AuthenticationManager,因此在用户通过身份验证后,将返回身份验证对象以及授权列表、用户和密码。

我还实现了SimpleUrlAuthenticationSuccessHandler,方法onAuthenticationSuccess()将检查他的权限,如果经过了身份验证和许可,用户将被重定向到他在URL上通知的页面(现在,当我尝试在此方法上调用Request.GetPareMeter(“RedIr”)时,我得到NULL。

public class GetURLFilter extends UsernamePasswordAuthenticationFilter{
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)
        throws AuthenticationException {

    String paginaRedirecionar = request.getParameter("redir");
    request.getSession().setAttribute("redirecionamento", paginaRedirecionar);

    return super.attemptAuthentication(request, response);
}
}

<bean id="authenticationFilter"
    class="com.uolinc.adm.security.GetURLFilter"
    p:authenticationManager-ref="radiusAuthenticationManager"
    p:authenticationFailureHandler-ref="radiusAuthenticationFailureHandler"
    p:authenticationSuccessHandler-ref="radiusAuthenticationSuccessHandler" />

<security:http auto-config="false"
    use-expressions="true"
    access-denied-page="/auth/denied" entry-point-ref="authenticationEntryPoint"
    disable-url-rewriting="true"
    access-decision-manager-ref="accessDecisionManager">

    <security:logout logout-url="/auth/logout" logout-success-url="/auth/login" />

    <security:custom-filter position="FORM_LOGIN_FILTER" ref="authenticationFilter" />
</security:http>

谢谢你

共有1个答案

李胤
2023-03-14

在提交登录表单期间调用UsernamePasswordAuthenticationFilterSimpleURLAuthenticationSuccessHandler,这是与呈现表单的请求不同的请求。因此在请求表单时出现的参数在提交表单时不会出现。您需要在会话中缓存该参数,或者将其作为隐藏参数添加到登录表单中,以便与普通登录参数一起重新提交(这样,您的AuthenticationSuccessHandler)。

请注意,使用客户端提供的数据以这种方式进行重定向是有风险的,除非您进行了某种验证(例如,检查URL是否在应用程序中)。否则,攻击者可以提供链接到恶意站点的URL,并可能在用户不知情的情况下劫持经过身份验证的会话或在安全站点上执行操作。

 类似资料:
  • 问题内容: 如何从JavaScript请求中获取“ GET”变量? 是jQuery还是YUI!内置此功能吗? 问题答案: 所有数据均在 您必须解析字符串,例如。 只需以GET变量名作为参数调用该函数,例如。 如果变量没有值或不存在,则此函数将返回变量value或undefined

  • 问题内容: 我有一个带有一些GET参数的URL,如下所示: 我需要获得的全部价值。我尝试读取该URL,但只有。如何使用JavaScript执行此操作? 问题答案: JavaScript 本身 没有内置处理查询字符串参数的内容。 在(现代)浏览器中运行的代码可以使用对象(它是浏览器提供给JS的API的一部分): 对于较旧的浏览器(包括Internet Explorer),您可以使用此polyfill

  • 我正在使用AWS Lambda+API网关+无服务器(Python)。太神奇了!

  • 问题内容: 在Java Web项目中,如何获得(如果可能)URL请求中的“ HTTP锚”部分?例如,当请求URL为http:// localhost:8080 / servlet / page.htm?param1 = value1&param2 = value2#section时, 我希望能够识别该部分。 上面的例子中产生的子 前述 的,在这种情况下:。有没有办法在符号 后 提取URL的一部分?

  • 问题内容: 我在从URL:获取值方面遇到问题。 帮助我更正我的控制器代码。我无法获得价值。 我的代码如下: : : : 问题答案: 快递4.x 要获取URL参数的值,请使用req.params 如果要获取查询参数,请使用req.query 快递3.x URL参数 查询参数