配置web.xml和glassfish容器实现javaEE表单验证

web.xml配置:

   <!-- 声明用于安全约束的角色 --> 
   <security-role>
        <role-name>ReimUser</role-name>
    </security-role>
    <security-role>
        <role-name>ReimAdmin</role-name>
    </security-role>

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>root</web-resource-name>
            <url-pattern>/service/*</url-pattern>
            <url-pattern>/rest/*</url-pattern>
            <http-method>POST</http-method>
            <http-method>GET</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>ReimUser</role-name>
        </auth-constraint>
    </security-constraint>

   <!--  配置表单验证 -->
    <login-config>
        <auth-method>FORM</auth-method>
        <!--  指定HTTP Basic验证中使用的领域名  -->
        <realm-name>ReimApp</realm-name>
        <form-login-config>
            <form-login-page>/login.jsp</form-login-page>
            <form-error-page>/login.jsp</form-error-page>
        </form-login-config>
    </login-config>    

 表单的action地址j_security_check  j_username j_password不可更改

 

新建用户表、组表并在glassfish的领域中配置对应的用户表、组表,用于校验用户是否合法。合法时从组表中读取用户对应的组设置到 container 中。

 

其实这就是容器实现的sam模块,他会从配置的 组表 里面查当前登录的用户有哪些组,然后设置  GroupPrincipal 和 sam中 从 token 解析 scope 出来去设置一样。

默认获取 UserPrincipal 对应的类,从里面解析出来的用户信息只有一个账号信息。如果需要获取完成的用户信息,可以自己实现ServerAuthModule模块来实现。

 

这里配置的参数就是ServerAuthModule类所用到的参数。

要支持这种,在 ServerAuthModule 的 validateRequest 里面加上对应的代码就可以了:

if(request.getServletPath().startsWith('/j_security_check')) {
String username = request.getParameter('j_username');
String password = request.getParameter('j_password');
//TODO: check username and password
//TODO: set user's groups
}

这样action 和 对应的参数名称就都可以自己定义了,。 

posted @ 2017-04-21 14:32  风吹过的绿洲  阅读(814)  评论(0编辑  收藏  举报