spring实战-Spring-security自定义登入登出、防csrf攻击及视图保护

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tidu2chengfo/article/details/77453996

第十篇:Spring-security自定义登入登出、防csrf攻击及视图保护

这是Spring及SpringMVC的最后一篇,本次主要演示SpringSecurity更使用的示例,如自定义的登录页面,系统登出,防止CSRF跨站攻击,以及视图保护视图保护可以定义到按钮级别的权限

先看自定义的登录页面

1,还是SecurityConfig的configure配置

@Override
	protected void configure(HttpSecurity http) throws Exception {
		whitelistHandler.handle(http)
			.authorizeRequests()
				.anyRequest().authenticated()
		.and()
			.formLogin()
	        .loginPage("/home/login")	/*自定义登录页面地址*/
        .and()
	        .logout()
	        	.logoutUrl("/logout")	/*自定义登出链接*/
        		.logoutSuccessUrl("/home/login") /*如果成功登出,需要跳转的页面*/
		.and()
          	.rememberMe()	/*登录的记住我选项*/
		        .tokenRepository(new InMemoryTokenRepositoryImpl())
		        .tokenValiditySeconds(2419200)/*记住登录状态4周*/
		        .key("idatKey");
	}

2,自定义登录视图,需要注意这里有个 <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>隐藏域,

security默认启用防CSRF攻击,所以必须有这个,否则会报错。同时注意form的action和username,password

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>

<h2>
	<s:message code="idat.login" text="welcome to login" />
</h2>
<c:url value="/home/regist" var="registUrl"/>
<a href="${registUrl }">Register</a>

<form name='form' action='login' method='POST'>
	<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
	<table>
		<tr>
			<td>User:</td>
			<td><input type='text' name='username'/></td>
		</tr>
		<tr>
			<td>Password:</td>
			<td><input type='password' name='password' /></td>
		</tr>
		<tr>
			<td colspan='2'><input id="remember_me" path="remember-me" type="checkbox" /> 
				<label for="remember_me" class="inline">Remember me</label></td>
		</tr>
		<tr>
			<td colspan='2'><input name="submit" type="submit" value="Login" /></td>
		</tr>
	</table>
</form>

通过以上方式,我们定义了自己的登录页面,可以在这个页面里面做美化工作,可以不再使用以前那个丑陋的登录页面了

3,登出连接

<!-- spring4 如果开启了scrf需要通过post的方式登出 -->
<c:url value="/logout" var="logoutUrl"/>
<form action="${logoutUrl }" method="post">
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
<input type="submit" value="logout"/>
</form>
4,登录之后,可以在页面展示登录的用户名

<sec:authentication property="principal" var="authentication"/>
用户名:${authentication.username} <br/>


5,视图保护

<sec:authorize url="/home/admin">
<c:url value="/home/admin" var="adminUrl"/>
<a href="${adminUrl }">Admin</a>
</sec:authorize>
如果当前登录用户拥有/home/admin的访问权限,则视图会渲染超链接控件<a href="${adminUrl }">Admin</a>,否则不会显示

该方法可以扩展到任何html表单,可以通过这种方式让权限精细到按钮级别


以上关于视图的还需要引用标签

<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %>






猜你喜欢

转载自blog.csdn.net/tidu2chengfo/article/details/77453996