(一)基于容器的身份验证 配置容器插件(在pom.xml文件中) · <userRealm>:配置提供身份验证机制的类,包括Hash、JAAS、JDBC三种实现方式,用于保存用户验证信息(包括用户名、密码、用户拥有的角色)。 · <name>:配置安全域名字,必须同web.xml中配置的一致。 配置角色权限 方法1:在web.xml文件中 · <url-pattern>:配置受保护的URL路径。 · <role-name>:配置允许访问受保护资源的角色(此处角色名必须与上一步中保存的角色匹配。 · 身份验证机制包括:BASIC、FORM、DIGEST、CLIENT-CERT,不同机制有各自特定的配置。 方法2:使用角色拦截器 两种方法对比: 同:可配置允许权限(允许指定角色访问指定的URL) 异:拦截器还可配置禁止权限(阻止指定的角色访问指定的URL) 实现身份验证 1) 在web.xml文件中配置登录页面的URL · <realm-name>:安全域名字,与pom.xml中<name>的值匹配。 2) 登录jsp页面 · 用户名字段名字:j_username · 密码字段名字:j_password · 表单提交路径:/j_security_check(与容器相关) 访问角色信息 · 使用HttpServletRequest里保存的信息,但没有通过ServletRequestAware接口直接使用HttpServletRequest对象。 · Struts2将授权分离到PrincipalProxy,通过PrincipalAware接口调用。 · Jsp页面中使用OGNL表达式获取角色信息。 (二)基于ACEGI的身份验证 配置Acegi的Servlet过滤器和过滤器映射(在web.xml文件中) · 该过滤器的顺序必须在第一个,因为过滤器的调用顺序与定义顺序一样。 · 过滤器映射中<url-pattern>的值应为/*,以确保所有请求都能被Acegi过滤器处理。 配置角色权限(在Acegi配置文件中) · 特殊的URL模式放在一般URL模式前面。 · 通过配置daoAuthenticationProvider实现自定义的身份验证提供者。 · 参考http://www.acegisecurity.org/ 实现身份验证(登录jsp页面) · 用户名字段名字:j_username · 密码字段名字:j_password · 表单提交路径:/j_acegi_security_check 访问角色信息 · 创建方法级的注释@。 · 创建拦截器,将授权信息通过被注释的方法赋给action。 · Jsp页面中可使用Acegi标签。 (三)自定义的身份验证 创建类级注释,用于标记受保护的action创建拦截器 · 阻止非授权用户访问被注释的action · 保护包的安全 · 添加错误消息 · 国际化错误消息 · 将未通过验证的用户重定向到登录页面 配置struts.xml文件 · 配置角色权限(配置拦截器/拦截器栈) · 配置全局验证结果 实现身份验证 · 自定义用于验证的action(LogonAction、LogoffAction)。 · 验证通过后,将角色信息保存到Http Session中。 访问角色信息 · 可在BaseAction中从session里获取出来,则以后的action只要继承BaseAction就可直接使用。 · Jsp页面中可使用OGNL表达式获取。