HttpServletRequest
のパラメーターマップに新しいパラメーターを追加します。
次のコード
request().getParameterMap().put("j_username", user);
request().getParameterMap().put("j_password", pwd);
このエラーを作成します
no modifications are allowed to a locked parameter map
これを行う正しい方法は何ですか?
リクエストのパラメータは、ブラウザからパラメータとして送信される値です。それらを変更する理由はありません。要求に値を関連付ける場合は、パラメーターではなく属性を使用します。これには、属性が文字列だけでなく任意のオブジェクトになる可能性があるという追加の利点があります。
request.setAttribute("user", new User(userName, password));
リクエストを別のリソースに転送する場合は、パラメーターを追加できます(ただし、良い方法とは言いません)。
request.getRequestDispatcher("/some/path?j_username=" + user + "&j_password=" + pwd).forward(request, response);
ただし、パラメータは正しくエンコードされる必要があります。
同様の問題にぶつかり、パラメーターマップのコピーを作成して回避しました。
Map<String, String[]> params = new HashMap<String, String[]>(req.getParameterMap());