【问题标题】:Hide spring session bean parameter values in URL在 URL 中隐藏 spring session bean 参数值
【发布时间】:2013-09-25 15:30:09
【问题描述】:

目标:隐藏页面 URL 中的键/值对。例如。 - http://abc.xyz.com/nav/book?clientID=390&fundID=-1&navDate=-1

我不希望 clientID 等在 URL 中可见(出于安全原因)。 我知道 http 是一个无状态协议。

我尝试过使用 HttpSession、Spring @SessionAttributes,并且目前正在使用 spring “session” 作用域 bean-

@Component
@Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class UserSession {

    private String clientID;
    private String fundID;
    private String navDate;

    public String getClientID() {
        return clientID;
    }
    public void setClientID(String clientID) {
        this.clientID = clientID;
    }
    public String getFundID() {
        return fundID;
    }
    public void setFundID(String fundID) {
        this.fundID = fundID;
    }
    public String getNavDate() {
        return navDate;
    }
    public void setNavDate(String navDate) {
        this.navDate = navDate;
    }
}

并在我的控制器中使用它-

@Controller
@SessionAttributes(value = {"client","fund","nav"})
public class HomeController {
    @Autowired
    private UserSession userSession;

    @RequestMapping(value = "abc", method = RequestMethod.GET)
    public ModelAndView navWorkbook(Model model, HttpServletRequest request, HttpServletResponse response,
            @RequestParam(required = false) String clientID,
            @RequestParam(required = false) String fundID,
            @RequestParam(required = false) String navDate) {
        ModelAndView modelAndView = new ModelAndView("abcd");
        .
        .
        .
        userSession.setClientID(clientID);
        userSession.setFundID(fundID);
        userSession.setNavDate(navDate);
        modelAndView.addObject("userSession", userSession);
        return modelAndView;
    }
}

有没有办法隐藏在 URL 中显示的 spring bean 的属性名称/值?

谢谢大家

【问题讨论】:

    标签: java spring http spring-mvc session-variables


    【解决方案1】:

    在请求映射中,您必须使用RequestMethod.POST 而不是RequestMethod.GET

     @RequestMapping(value = "abc", method = RequestMethod.POST)
    

    【讨论】:

    • 谢谢你的工作,所以你能告诉我 1.) 如果不是 URL,这些数据存储在哪里,因为 http 毕竟是无状态的? 2.) 为什么在访问 bean 属性时 post 与 get 不同?
    • @kaustavdatta HTTP 协议不强制 HTTP 服务器读取 GET HTTP 请求的正文。因此需要在 URL 中发送请求参数。然而,HTTP POST 会强制服务器读取请求正文。因此,您可以将 url 编码的请求参数直接放在正文中。
    • @kaustavdatta 但它如何在重定向:值上工作,bcose 重定向仅适用于 RequestMethod.GET
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多