我在spring-mvc应用程序上使用了spring-security。关于我正在开发的应用程序的几点意见。Spring Security重定向到禁止页面(403)
- 主页是登录页即/ users()。登录菜单用作HTML下拉菜单。
- 实施
userDetailsService()
和UserDetails()
,而不是AuthenticationManager
/提供商 - 需要的是人查看主页,没有任何作用。
现状:
- 并重定向到入口点-REF提到403页。
- 不知道如何将其重定向到user.jsp或/ users
- 我可以在网上找到的所有示例都显示出实现`AuthenticationManager的相同的东西。有些代码:
安全的context.xml
<import resource="servlet-context.xml" />
<!-- Global Security settings -->
<security:global-method-security pre-post-annotations="enabled" />
<!-- Spring Security framework settings -->
<security:http pattern="/users" use-expressions="true" auto-config="true" disable-url-rewriting="true" entry-point-ref="formAuthenticationEntryPoint">
<security:session-management>
<security:concurrency-control max-sessions="5" error-if-maximum-exceeded="false"/>
</security:session-management>
<security:intercept-url pattern="/*" requires-channel="any" access="permitAll" />
<security:intercept-url pattern="/**" requires-channel="any" access="permitAll" />
</security:http>
<!-- queries to be run on data -->
<beans:bean id="formAuthenticationEntryPoint"
class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/>
<bean id="LoginServiceImplementation" class="com.WirTauschen.service.LoginServiceImpl"></bean>
<security:authentication-manager alias="authenticationManager">
<security:authentication-provider user-service-ref="userDetailsService" />
</security:authentication-manager>
</beans>
LoginServiceImpl:
@Service("userDetailsService")
public class LoginServiceImpl implements UserDetailsService{
@Autowired private UserDao userDao;
@Autowired private Assembler assembler;
@Override
@Transactional
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
UserDetails userDetails = null;
User user = userDao.findByName(username);
if(user == null) { throw new UsernameNotFoundException("Wrong username or password");} //Never specify which one was it exactly
return assembler.buildUserFromUserEntity(user);
}
}
登录形式
<nav class="col-lg-5 col-md-5 col-sm-5">
<ul class="pull-right">
<li class="purple"><a href="#"><i class="icons icon-user-3"></i> Login</a>
<ul id="login-dropdown" class="box-dropdown">
<li>
<form id="form" action="<c:url value='/login'/>" method="POST">
<div class="box-wrapper">
<h4>LOGIN</h4>
<div class="iconic-input">
<input type="text" placeholder="Username" name="username" id="username" value="">
<i class="icons icon-user-3"></i>
</div>
<div class="iconic-input">
<input type="password" placeholder="Password" name="password" id="password" value="">
<i class="icons icon-lock"></i>
</div>
<input type="checkbox" id="loginremember"> <label for="loginremember">Remember me</label>
<br>
<br>
<div class="pull-left">
<input name="submit" type="submit" class="orange" value="Login">
</div>
<div class="pull-right">
<a href="#">Forgot your password?</a>
<br>
<a href="#">Forgot your username?</a>
<br>
</div>
<br class="clearfix">
</div>
<div class="footer">
<h4 class="pull-left">NEW CUSTOMER?</h4>
<a class="button pull-right" href="create_an_account.html">Create an account</a>
</div>
</form>
</li>
</ul>
</li>
<li><a href="#"><i class="icons icon-lock"></i> Create an Account</a></li>
</ul>
</nav>
(的hompage HTML代码部分user.jsp笼罩)
从security-applicationContext.xml以表单登录
<security:form-login login-page="/users" default-target-url="/users"/>
任何帮助都会很好。从来不知道春季安全只会是折磨。
您的用户从来没有得到验证,又该如何呢?没有配置“登录表单”,因此没有任何内容会读取用户名/密码,也不会对用户进行身份验证。主要问题是你自己做得太多,你不需要自定义入口点,只需使用默认的'form-login'即可。 – 2014-10-07 12:10:50
您的意思是登录表单作为HTML代码,它就在那里。我没有发布它。我正在编辑帖子来粘贴它。 – 2014-10-07 12:16:08
没有xml配置中的'login-form'。这是注册过滤器的配置部分,该过滤器监听url并处理登录尝试。如果您没有添加,那么将不会有任何验证用户身份的信息... – 2014-10-07 12:23:00