Est-tomcat 7.0.6 prend déjà en charge l'annotation SevletSercurity dans la spécification du servlet 3.0?
-
24-10-2019 - |
Question
J'étais Tring d'utiliser l'annotation ServletSecurity de spécification servlet 3.0 dans le tomcat 7.0.6, mais il semble que tomcat ne scanne pas l'annotation ServletSecurity. Le code suit,
@WebServlet(name="IndexServlet",urlPatterns={"/index"})
@DeclareRoles("ROLE_ADMIN")
@ServletSecurity(value=@HttpConstraint(rolesAllowed="ROLE_ADMIN"),httpMethodConstraints=@HttpMethodConstraint("GET"))
public class IndexServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/jsp/main.jsp").forward(request, response);
}
}
Donc, il y a quelqu'un qui a testé l'annotation ServletSecurity avec succès dans tomcat 7? Ou le tomcat 7 ne supporte pas encore l'annotation ServletSecurity?
Je suis confus par le problème pour quelques jours, quelqu'un pourrait figurer dehors pour moi? Toute aide est appréciée.
La solution
Vous devez supprimer httpMethodConstraints=@HttpMethodConstraint("GET")
Une « caractéristique » intéressante dans la spécification sont ou est contraintes - pas ET. Donc, si vous demandez /index
comme GET -. La contrainte de sécurité passe et la contrainte rolesAllowed est ignorée
Une bibliothèque tiers comme SecurityFilter [ http://securityfilter.sourceforge.net/ ] fera probablement un meilleur travail à la manipulation des contraintes par rapport à ce qui est prévu par les spécifications Servlet.