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 简介(转)

apache shiro:在 shiro.ini 中添加啥以使用 JWT 和 keycloak 作为授权服务器进行客户端身份验证

Cas(用于身份验证)+ OpenLDAP(用于用户名、密码+角色和权限)+ Apache Shiro(用于授权)