webapp的Apache Shiro授权和身份验证配置
Posted
技术标签:
【中文标题】webapp的Apache Shiro授权和身份验证配置【英文标题】:Apache Shiro Authorization and Authentication configuration for webapp 【发布时间】:2015-12-24 02:32:45 【问题描述】:有一些配置问题。
我正在尝试将 Apache Shiro 与 mongo DB 领域集成。
ini 文件:
[main]
mongoDBRealm = realm.MongoRealm
securityManager.realms = $mongoDBRealm
# specify login page
shiro.loginUrl = /<ProjFolderNameInEclipse>/SuppliersLogin.html
# name of request parameter with username; if not present filter assumes 'username'
#authc.usernameParam = user
# name of request parameter with password; if not present filter assumes 'password'
#authc.passwordParam = pass
# does the user wish to be remembered?; if not present filter assumes 'rememberMe'
#authc.rememberMeParam = remember
# redirect after successful login
authc.successUrl = /<ProjFolderNameInEclipse>/pass.html
[urls]
# enable authc filter for all application pages
/<ProjFolderNameInEclipse>/SuppliersLogin.html = authc
这个 ini 正在使用:
public static void main(String[] args)
Factory<SecurityManager> factory = new IniSecurityManagerFactory("shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject currentUser = SecurityUtils.getSubject();
..
some logic
..
上面的代码只是为了确保领域正常工作。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<listener>
<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
</listener>
<context-param>
<param-name>shiroConfigLocations</param-name>
<param-value>classpath:shiro.ini</param-value>
</context-param>
<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>
</web-app>
现在我有一个简单的登录页面,位于 WebContent
文件夹内:
格式如下:
<form method="POST" action="" name="loginform">
<header>
Sign In
</header>
<fieldset>
<section>
<label class="label">User name</label>
<label class="input"> <i class="icon-append fa fa-user"></i>
<input type="text" name="username">
<b class="tooltip tooltip-top-right"><i class="fa fa-user txt-color-teal"></i> Please enter email address/username</b></label>
</section>
<section>
<label class="label">Password</label>
<label class="input"> <i class="icon-append fa fa-lock"></i>
<input type="password" name="password">
<b class="tooltip tooltip-top-right"><i class="fa fa-lock txt-color-teal"></i> Enter your password</b> </label>
<div class="note">
<a href="forgotpassword.html">Forgot password?</a>
</div>
</section>
<section>
<label class="checkbox">
<input type="checkbox" name="remember" checked="">
<i></i>Stay signed in</label>
</section>
</fieldset>
<footer>
<!-- <button type="submit" class="btn btn-primary" value="Sign In"> -->
<button type="submit" class="btn btn-primary" value="Login" name="submit">
Sign in
</button>
</footer>
</form>
在点击提交 btn 时,除了重新加载页面之外没有任何工作..
我做错了什么?
【问题讨论】:
【参考方案1】:在我看来,shiro 不支持开箱即用的 MongoDB。请查看以下帖子,以找到可能的解决方案。请注意,我不是可能的解决方案的作者:
Full example with code - Shiro User List on nabble.com Shiro MongoDB code on github - by TensorWrench当您描述 Web 应用程序的行为时,shiro 无法找到您在 shiro.ini
(mongoDBRealm = realm.MongoRealm
) 中指定的领域,因此它会将您重定向到登录页面。
【讨论】:
以上是关于webapp的Apache Shiro授权和身份验证配置的主要内容,如果未能解决你的问题,请参考以下文章
使用 Apache Shiro 的 Restful Web 服务身份验证和授权
Apache Shiro - 用于身份验证和属性的 LDAP/用于授权的 Ini
如何使用带有 LDAP 身份验证的 Apache Shiro 添加角色授权
apache shiro:在 shiro.ini 中添加啥以使用 JWT 和 keycloak 作为授权服务器进行客户端身份验证