`
qq543123909
  • 浏览: 25223 次
社区版块
存档分类
最新评论

Spring Security 学习(2)

阅读更多
针对 Spring Security(1) 入门部分

A)那个登录页面哪里来的?
想也想的到 既然自己没有写 那么存在 必然是框架做的.
原因:
当有请求道来的时候,Spring Security框架开始检查要访问的资源是否有权访问,如果当前登
录用户无权或者当前根本就没有用户登录,则Spring Securtiy 框架就自动产生一个登录页面。
如下是spring Security 框架帮我生成的 登陆页面源码:
<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">密&nbsp;&nbsp;码:</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>
 
 
 
 
 
  • 大小: 43.9 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics