/ / Spring MVC jednoduché ovládanie prístupu z interceptora: ako zobraziť chybu - pružina, pružina-mvc

Pružina MVC jednoduché ovládanie prístupu z interceptora: ako zobraziť chybu - pružina, pružina-mvc

V webovej aplikácii jar 4.2 mám rights objekt v relácii, z ktorej sa môžem dotazovaťči má prihlásený používateľ prístup k určitej stránke. Môžem skontrolovať prístupové práva z kontrolóra a presmerovať na inú stránku so správou. Problém je, že to musím opakovať pre každú požiadavku v každom regulátore.

Môžem presunúť takmer celý kód na stíhačku, ale nemám prístup RedirectAttributes odtiaľ, takže neviem, ako by som mohol pridať chybové hlásenie. Existuje cesta?

@Controller
@SessionAttributes("rights")
@RequestMapping("/f")
public class FController {
...
@RequestMapping(value="/edit/{id}", method=RequestMethod.GET)
public String edit(@PathVariable("id") int id,
@ModelAttribute("rights") UserRights rights,
RedirectAttributes redA, ModelMap model) throws SQLException {
if (!rights.canAccess("/f/edit")) {
redA.addFlashAttribute("errormessage", messages.getMessage("error.noright", null, Locale.getDefault()));
return "redirect:/f/list";
}
... // set up model
return "fEdit";
}
...
}

odpovede:

1 pre odpoveď č. 1

Áno môžeš! Nie je tak dobre integrovaný ako to, čo dostanete v riadiacich metódach, ale môžete získať prístup k výstupnej flashovej mape v interceptore. Odkazy nájdete v tejto kapitole Používanie atribútov flash v jarnom rámcovom referenčnom manuáli. A vďaka ModelAndViewDefiningException, stále môžete požiadať spoločnosť Spring, aby vykonala presmerovanie a spracovala výstupnú flash kartu

Mohli by ste niečo podobného vložiť do odposluchu:

    if (!rights.canAccess("/f/edit")) {
// get access to the output flash map
FlashMap redA = RequestContextUtils.getOutputFlashMap(HttpServletRequest request);
// add the redirect attributes
redA.put("errormessage", messages.getMessage("error.noright", null, Locale.getDefault()));
// prepare the redirection
ModelAndView redirMav = new ModelAndView("redirect:/f/list");
// ask the spring machinery to process the redirection
throw new ModelAndViewDefiningException(redirMav);
}