【发布时间】:2015-01-13 13:52:09
【问题描述】:
我正在使用 Apache Shiro 进行 Web 应用程序的管理员身份验证。所有的管理内容都放在 /admin 目录下,我有一个 AdminServlet 来处理对管理功能的请求。 Admin Servlet 的 URL 映射是 /Admin。如果用户想要访问 /admin 下的内容,Shiro 成功拦截请求并重定向到登录页面。但是,我在浏览器的 URL 栏中输入 /Admin,我基本上可以绕过 Shiro 并无需身份验证即可进入管理页面。 如何保护我的 servlet,使其仅在经过身份验证后才执行请求?
这是我的代码的相关部分:
shiro.ini:
[main]
shiro.loginUrl = /login.jsp
[urls]
/login.jsp = authc
/logout = logout
/admin/** = authc
web.xml:
<servlet>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>mypackage.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AdminServlet</servlet-name>
<url-pattern>/Admin</url-pattern>
</servlet-mapping>
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
无论 servlet 有什么功能,它总是会创建一个 RequestDispatcher 转发到位于 /admin 下的某个文件。
我尝试将 /Admin/**(作为 servlet URL 映射)放入 shiro.ini 文件中作为经过身份验证的内容,但结果在提交凭据后我一直被重定向到登录页面。
提前谢谢你!
【问题讨论】:
标签: java apache servlets shiro