私は spring mvc が初めてで、Web プロジェクトの管理パネルに取り組んでいます。
これが私の管理ページコントローラーの例です:
@Controller
@RequestMapping("/admin/article/**")
public class ArticleController {
private ArticleDao articleDao;
private String fileName;
private String baseUrl;
public ArticleController() {
articleDao = ArticleDaoFactory.create();
}
@RequestMapping(value = "/admin/article",method = RequestMethod.GET)
public String doGet(ModelMap model,HttpServletRequest request,ArticleForm articleForm) {
//some codes
}
@RequestMapping(value = "/admin/article/add",method = RequestMethod.GET)
public String doGetAdd(ModelMap model,ArticleForm articleForm) {
model.addAttribute("article", articleForm);
return "admin/articleAdd";
}
@RequestMapping(value = "/admin/article/add",method = RequestMethod.POST)
public String doPost(@ModelAttribute ArticleForm article, BindingResult result ,ModelMap model){
//some codes
}
@RequestMapping(value = "/admin/article/edit/{id}",method = RequestMethod.GET)
public String getEdit(ModelMap model, @PathVariable("id") int id) {
//some codes
}
@RequestMapping(value = "/admin/article/edit/{id}",method = RequestMethod.POST)
public String postEdit(ModelMap model, @PathVariable("id") int id, ArticleForm article, BindingResult result) {
//some codes
}
@RequestMapping(value = "/admin/article/delete/{id}",method = RequestMethod.GET)
public void getDelete(ModelMap model, @PathVariable("id") int id, HttpServletResponse response) {
//some codes
}
}
ここで、AdminController という名前の別のコントローラー (たとえば) に別のマッピングが必要であり、管理者を認証し、ログインしていない場合はログイン ページに移動します。確かに認証は 1 つの例です。
私の認証クラスにはリクエストとセッションの参照が必要であることに注意してください(そして、他のクラスには春によって作成された他の参照が必要です)
コンストラクター メソッドを使用して HttpServletRequest を取得できないことがわかったので、別のリクエスト マッピングを作成してメソッドを呼び出しました。
この方法でプロパティを設定できますが、すべての管理 URL でこの方法を使用することはできません。
@Controller
@RequestMapping(value = "/admin/**",method = RequestMethod.GET)
public class AdminController {
Authentication authentication;
HttpServletRequest request;
HttpSession session;
HttpServletResponse response;
public void checkAndSet(HttpSession session,HttpServletRequest request,HttpServletResponse response) {
authentication = new Authentication(session,request);
this.request = request;
this.session = session;
this.response = response;
if(!authentication.isLoggedIn()){
System.out.println(" I'm not logged in");
response.setHeader("Location","/admin/login");
}
}
それで、「管理者」ページの子である他のすべてのコントローラーでメソッドを呼び出すために、コントローラーにリクエストマッピングを記述する方法についていくつか提案が必要ですか?
参考までに:私はこれについて春のセキュリティを考えていません。
ありがとう;