Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何防止访问未经Apache Shiro验证的Servlet?_Java_Apache_Servlets_Shiro - Fatal编程技术网

Java 如何防止访问未经Apache Shiro验证的Servlet?

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:

我正在使用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