好久没碰springsecurity了,最近在做一个小东西的时候,部署遇到了跳转问题,所以写篇文章记录一下。
项目的其中一个需求是登录,账号也是固定的,所以直接在配置文件中处理。springsecurity具体的配置网上一大堆,这边就不展开说了。
项目结构:
直接上springsecurity配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd">
<!--配置不用拦截的资源-->
<http pattern="/*.html" security="none"></http>
<http pattern="/css/**" security="none"></http>
<http pattern="/img/**" security="none"></http>
<http pattern="/js/**" security="none"></http>
<http pattern="/plugins/**" security="none"></http>
<!-- 页面的拦截规则 -->
<http use-expressions="false">
<intercept-url pattern="/**" access="ROLE_ADMIN"/>
<form-login login-page="/login.html" default-target-url="/admin/index_user.html" authentication-failure-url="/error_page.html" />
<csrf disabled="true"/>
<headers>
<frame-options policy="SAMEORIGIN"/>
</headers>
<logout logout-url="/logout"/>
</http>
<!--配置登录的账号和密码-->
<authentication-manager>
<authentication-provider>
<user-service>
<user name="admin" password="123456" authorities="ROLE_ADMIN"/>
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
form-login标签用来配置自定义的登录页面,项目里配置的是login.html,default-target-url是用来配置登录成功以后,需要跳转的页面,这里配置的是/admin/index_user.html,因为index_user.html在webapp下的admin目录里面。
自定义的登录页面login.html上需要加form标签登录框,如下:
<form class="sui-form" action="/login" method="post" id="loginform">
<div class="input-prepend"><span class="add-on loginname"></span>
<input id="prependedInput" type="text" name="username" placeholder="用户名" class="span2 input-xfat">
</div>
<div class="input-prepend"><span class="add-on loginpwd"></span>
<input id="prependedInput" type="password" name="password" placeholder="密码" class="span2 input-xfat">
</div>
<div class="logined">
<a class="sui-btn btn-block btn-xlarge btn-danger" onclick="doucment:loginform.submit()" target="_blank">登 录</a>
</div>
</form>
完成。
eclipse调试成功后,导出war包,部署到tomcat里面。
浏览器输入 http://localhost:8080/investigation/,直接跳转到登录页面
一切正常。然后在下面的登录框中输入账号:admin,密码:123456,点击登录,页面就显示404,提示为找不到/login。
查了半天,发现在登录页login.html里面form的action属性里添加项目路径investigation,然后重新运行服务器,就能成功跳转。具体修改如下:
<form class="sui-form" action="/investigation/login" method="post" id="loginform"><!--此处action需要加上工程的路径-->
<div class="input-prepend"><span class="add-on loginname"></span>
<input id="prependedInput" type="text" name="username" placeholder="用户名" class="span2 input-xfat">
</div>
<div class="input-prepend"><span class="add-on loginpwd"></span>
<input id="prependedInput" type="password" name="password" placeholder="密码" class="span2 input-xfat">
</div>
<div class="logined">
<a class="sui-btn btn-block btn-xlarge btn-danger" onclick="doucment:loginform.submit()" target="_blank">登 录</a>
</div>
</form>
在真正部署的时候,修改tomcat的配置文件里面默认的访问路径即可,不需要在上面的action里面改。