Play 2.3 (Java)을 사용 중입니다. Global.java
파일에 onRequest
메서드가 있습니다. 내가 요청을 통과 할 때 지금인터셉터에서 컨트롤러 방법으로 정보 전달
public static Promise<Result> all() {
String name = (String) ctx().args.get("Name");
System.out.println(name);
// rest of code
}
- 내 컨트롤러 파일 내부에, 나는이 같은 방법을 가지고,
private static ArrayList<String> admin_users = new ArrayList<String>();
public static ArrayList<String> getAdmin_users() {
return admin_users;
}
public static void setAdmin_users(ArrayList<String> admin_users) {
Global.admin_users = admin_users;
}
@Override
public void onStart(play.Application arg0) {
ArrayList<String> admins = new ArrayList<String>();
admins.add("aahuja");
admins.add("chlr");
admins.add("bobba");
setAdmin_users(admins);
}
private static ArrayList<String> admin_users = new ArrayList<String>();
public static ArrayList<String> getAdmin_users() {
return admin_users;
}
public static void setAdmin_users(ArrayList<String> admin_users) {
Global.admin_users = admin_users;
}
@Override
public void onStart(play.Application arg0) {
ArrayList<String> admins = new ArrayList<String>();
admins.add("aahuja");
admins.add("chlr");
admins.add("bobba");
setAdmin_users(admins);
}
private class ActionWrapper extends Action.Simple {
private String user;
public ActionWrapper(Action<?> action, String user) {
this.delegate = action;
this.user = user;
}
@Override
public Promise<Result> call(Http.Context ctx) throws java.lang.Throwable {
Promise<Result> result = this.delegate.call(ctx);
ctx.args.put("Name", this.user);
}
@Override
public Action<?> onRequest(Http.Request request, java.lang.reflect.Method actionMethod) {
if(request.getHeader("OriginalName") != null){
if(getAdmin_users().contains(request.getHeader("OriginalName"))){
if(request.hasHeader("IMPERSONATE") && request.getHeader("IMPERSONATE").equals("true")){
return new ActionWrapper(super.onRequest(request, actionMethod), request.getHeader("IMPERSONATE-IDENTITY"));
}
}
return new ActionWrapper(super.onRequest(request, actionMethod), request.getHeader("OriginalName"));
}
else
return super.onRequest(request, actionMethod);
}
지금 - 에 유래 및 기타 리소스에 대한 몇 가지 답변에 따라, 내 Global.java
같은입니다 - OriginalName: abcd
과 같은 헤더 정보가있는이 응용 프로그램은 내 컨트롤러에 null
값을 표시합니다.
ctx
올바른 데이터 전달 방법은 무엇입니까? 올바른 방법이 아니라면. 주요 비즈니스 로직에서 여분의 로직을 제거하려고합니다.
인터셉터에서 컨트롤러로 전달 될 때 헤더 정보를 수정할 수있는 경우에도 마찬가지입니다. 그러나 그렇게 할 수있는 적절한 방법은 없습니다.
당신은 당신의 comlete 코드를 붙여야합니다. 나는 당신이 여기 중요한 정보 제언을 놓치고 있다고 생각합니다. 또한 델리게이트를 호출하기 전에'ctx.args.put()'을 넣으십시오. – bjoernhaeuser
@bjoernhaeuser 고맙습니다. 근무하기 전에'ctx.args.put()'을 사용했습니다. 왜 이런 일이 일어 났는지 설명 할 수 있니? – hyades