Spring Security 学习(二)
Spring Security 学习(2)
有明显的 缺陷:
B) 一般登录页面都是我们自己编写的,并且登录页面是不需要验证直接可以访问的。
Ok 创建自己的Login.jsp.
1. login.jsp
很明显的是 这个login.jsp 里的input 元素 name属下有些熟悉的值.
2.配置.(applicationContext.xml)
到此就可以测试了 自己的 Login.jsp
testing...
那么你会发现一些不足的地方随之暴入出来....
C) 登陆时的错误信息如何显示 出来.
Spring Security 框架将所有的错误信息都定义成了异常,并且提供了国际化的资源文件。
这个资源文件在 spring-security-core-xxx.jar文件中

框架有提供的资源文件 我们可以使用 , 一个好的框架并不体现是他提供了什么 更为重要的他开放的接口 让用户获得更多的控制权 ,
3.创建 massage_zh_CN.properties
AbstractUserDetailsAuthenticationProvider.badCredentials=\u60A8\u65E0\u6743\u8BBF\u95EE\u8BE5\u8D44\u6E90,\u8BF7\u767B\u5F55
//您无权访问该资源,请登录
更多定义 可以参考上框架提供的资源文件.
4 配置 .(applicationContext.xml)
5. 添加提示(login.jsp)
再次Testing...
登陆错误将给出提示.!
依然是问题:
D) 密码配置在文件中 未加密..
密码以明文的形式出现在了配置文件中,这是非常危险的。所以我们可以将真实密码经过加密之后的结果放到配置文件中。这需要在配置文件中指明使用什么样的加密算法。
MD5是一种不可逆的加密算法,验证的时候,将用户输入的密码经过MD5加密之后的结果再与配置文件中配置的密文进行比较,如果相同则通过验证。
6.继续配置.(applicationContext.xml)
针对 Spring Security(1) 入门部分
A)那个登录页面哪里来的?
想也想的到 既然自己没有写 那么存在 必然是框架做的.
原因:
当有请求道来的时候,Spring Security框架开始检查要访问的资源是否有权访问,如果当前登录用户无权或者当前根本就没有用户登录,则Spring Securtiy 框架就自动产生一个登录页面。
A)那个登录页面哪里来的?
想也想的到 既然自己没有写 那么存在 必然是框架做的.
原因:
当有请求道来的时候,Spring Security框架开始检查要访问的资源是否有权访问,如果当前登录用户无权或者当前根本就没有用户登录,则Spring Securtiy 框架就自动产生一个登录页面。
如下是spring Security 框架帮我生成的 登陆页面源码:
当在登录页面进行了正确的登录后,Spring Security会自动进行登录验证,如果成功登录,将用户信息放到session中,然后转到先前请求的页面上.我们可以在index中将session中 的key—value打印出来,看看Spring Security 将用户信息如何放到session中的.
<html><head><title>Login Page</title></head><body onload='document.f.j_username.focus();'> <h3>Login with Username and Password</h3><form name='f' action='/spring_security/j_spring_security_check' method='POST'> <table> <tr><td>User:</td><td><input type='text' name='j_username' value=''></td></tr> <tr><td>Password:</td><td><input type='password' name='j_password'/></td></tr> <tr><td colspan='2'><input name="submit" type="submit"/></td></tr> <tr><td colspan='2'><input name="reset" type="reset"/></td></tr> </table> </form></body></html>
当在登录页面进行了正确的登录后,Spring Security会自动进行登录验证,如果成功登录,将用户信息放到session中,然后转到先前请求的页面上.我们可以在index中将session中 的key—value打印出来,看看Spring Security 将用户信息如何放到session中的.
用户使用 的key为: SPRING_SECURITY_LAST_USERNAME 对应的是 用户登陆时的用户名.
有明显的 缺陷:
B) 一般登录页面都是我们自己编写的,并且登录页面是不需要验证直接可以访问的。
Ok 创建自己的Login.jsp.
1. login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>用户登录页面</title> </head> <body> <p style="color:red;" >${sessionScope.SPRING_SECURITY_LAST_EXCEPTION.message}</p> <form action="${pageContext.request.contextPath}/j_spring_security_check" method="post"> <label for="userName">用户名:</label> <input id="userName" name="j_username" /><br /> <label for="password">密 码:</label> <input id="password" type="password" name="j_password" /><br /> <input type="submit" value=" 登录 " /> </form> </body> </html>
很明显的是 这个login.jsp 里的input 元素 name属下有些熟悉的值.
2.配置.(applicationContext.xml)
<security:http auto-config="true"> <!-- login-page 指定登录页面 --> <security:form-login login-page="/login.jsp" /> <!-- 对于登录页面不进行拦截 至于后面的* 在访问loing.jsp时可能会传入一些参数 --> <security:intercept-url pattern="/login.jsp*" filters="none" /> <security:intercept-url pattern="/**" access="ROLE_USER" /> </security:http>
到此就可以测试了 自己的 Login.jsp
testing...
那么你会发现一些不足的地方随之暴入出来....
C) 登陆时的错误信息如何显示 出来.
Spring Security 框架将所有的错误信息都定义成了异常,并且提供了国际化的资源文件。
这个资源文件在 spring-security-core-xxx.jar文件中
框架有提供的资源文件 我们可以使用 , 一个好的框架并不体现是他提供了什么 更为重要的他开放的接口 让用户获得更多的控制权 ,
3.创建 massage_zh_CN.properties
AbstractUserDetailsAuthenticationProvider.badCredentials=\u60A8\u65E0\u6743\u8BBF\u95EE\u8BE5\u8D44\u6E90,\u8BF7\u767B\u5F55
//您无权访问该资源,请登录
更多定义 可以参考上框架提供的资源文件.
4 配置 .(applicationContext.xml)
<!-- 这里定义的messageSource对象 是 spring Security框架内部使用消息类。 --> <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <property name="basename" value="classpath:message_zh_CN" /> </bean>
5. 添加提示(login.jsp)
<p style="color:red;" >${sessionScope.SPRING_SECURITY_LAST_EXCEPTION.message}</p>
再次Testing...
登陆错误将给出提示.!
依然是问题:
D) 密码配置在文件中 未加密..
密码以明文的形式出现在了配置文件中,这是非常危险的。所以我们可以将真实密码经过加密之后的结果放到配置文件中。这需要在配置文件中指明使用什么样的加密算法。
MD5是一种不可逆的加密算法,验证的时候,将用户输入的密码经过MD5加密之后的结果再与配置文件中配置的密文进行比较,如果相同则通过验证。
6.继续配置.(applicationContext.xml)
<!--配置认证管理器 --> <security:authentication-manager> <security:authentication-provider> <security:password-encoder hash="md5"/> <security:user-service> <security:user name="user" password="ee11cbb19052e40b07aac0ca060c23ee" authorities="ROLE_USER" /><!-- 密码 MD5 加密后的字串 --> </security:user-service> </security:authentication-provider> </security:authentication-manager>