Java 如何防止访问未经Apache Shiro验证的Servlet?
我正在使用ApacheShiro进行web应用程序的管理员身份验证。所有的管理内容都放在/admin目录下,我有一个AdminServlet来处理对管理特性的请求。管理Servlet的URL映射为/Admin。如果用户想要访问/admin下的内容,Shiro成功拦截请求并重定向到登录页面。但是,我在浏览器的URL栏中键入/Admin,我基本上可以绕过Shiro进入管理页面,而无需验证。 如何保护servlet,使其仅在经过身份验证的情况下执行请求 以下是我代码的相关部分: shiro.ini:Java 如何防止访问未经Apache Shiro验证的Servlet?,java,apache,servlets,shiro,Java,Apache,Servlets,Shiro,我正在使用ApacheShiro进行web应用程序的管理员身份验证。所有的管理内容都放在/admin目录下,我有一个AdminServlet来处理对管理特性的请求。管理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文件,使其成为经过身份验证的内容,但结果是,在提交凭据后,我一直被重定向到登录页面
提前谢谢你 试试这个:
您的管理Servlet url模式如下:
/管理员/*
将此添加到web.xml:
org.apache.shiro.web.env.EnvironmentLoaderListener
将筛选器映射替换为以下内容:
雪洛菲特
/*
您的shiro.xml:
希望有帮助 如果有人试图访问受限制的功能,通过重定向回登录解决了问题,但这也很有帮助!
[main]
shiro.loginUrl = /login.jsp
[urls]
/login.jsp = authc
/logout = logout
/admin/** = authc